微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 iOS 应用程序中管理 WKWebView 和 Alamofire API 调用下的单独 cookie 和会话 我们想要达到的目标问题我们的尝试

如何解决在 iOS 应用程序中管理 WKWebView 和 Alamofire API 调用下的单独 cookie 和会话 我们想要达到的目标问题我们的尝试

我们想要达到的目标

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

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

问题

在第二个功能中一切正常,直到用户在第一个功能登录网站。问题是以某种方式通常管理会话,第二个功能用户的帐户执行操作,而不是作为匿名用户执行!

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

我们的尝试

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

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

解决方法

我们发现了问题!

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

我们在屏幕完成时使该计时器无效并解决了问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?