gpt4 book ai didi

ios - 在 iOS 应用程序中的 WKWebView 和 Alamofire API 调用下管理单独的 cookie 和 session

转载 作者:行者123 更新时间:2023-12-04 03:42:54 29 4
gpt4 key购买 nike

我们想要实现的目标

在我们的 iOS 应用程序中,我们有两种不同的功能来处理网站调用:

  1. 在 WKWebView 中,我们加载特定的网站,用户可以在其中登录他们的帐户,然后我们解析页面以处理数据。
  2. 我们正在从 Alamofire 调用同一网站的另一个网页来执行一些操作(作为匿名用户)并解析数据。<

问题

在用户使用第一个功能登录网站之前,第二个功能一切正常。问题是 session 以某种方式被共同管理,第二个功能对用户帐户执行操作,而不是作为匿名用户执行!

经过一些研究,我们了解到在 iOS 中,cookie 是在 HTTPCookieStorage 下管理的。 .因此,当用户在 WKWebView 下登录时,它会在 HTTPCookieStorage 中创建一个 session ,并且这些 cookie 正在(内部)用于 Alamofire 调用(它将预期的匿名网站调用转换为用户可识别的调用)。根据this ,似乎 Alamofire 也在同一个 HTTPCookieStorage 下管理 cookie。

我们尝试过的

在通过 Alamofire 调用 API 之前,我们备份某个变量中的所有 cookie,并从 HTTPCookieStorage 中删除所有 cookie。然后,我们启动 API 调用并完成工作(希望它将管理新的 cookie,这些 cookie 将作为匿名用户执行操作)。最后,我们将备份的 cookie 恢复到 HTTPCookieStorage。这样,当用户访问 WKWebView 上的同一个站点时, session 保持原样,他们不必再次登录(工作正常)!但即使在清除 cookie 存储之后,新的自动生成的 cookie(在 API 调用期间)也会以某种方式识别该网站上的用户,并且在该用户的帐户中执行操作而不是匿名调用!

那么,我们如何在 Alamofire 和 WKWebView 下管理两个不同的 session 来避免这个问题呢?我们可以使用 WKHTTPCookieStorage 做点什么吗?

最佳答案

我们发现了问题!

在 WebView 中,有一个 Timer 每 0.5 秒(无限)评估 JavaScript,并且当屏幕完成时该计时器不会失效。由于该用户 session 一直在后台维护,因此即使我们正在清除 cookie,它也会影响 API。

我们在屏幕结束时使该计时器无效,这解决了问题。

关于ios - 在 iOS 应用程序中的 WKWebView 和 Alamofire API 调用下管理单独的 cookie 和 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65652787/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com