【发布时间】:2015-04-11 23:13:52
【问题描述】:
我一直在努力实现在 macOS 中为每个 WebView 拥有一个唯一(非共享)cookie jar 的目标(iOS 的 cookie 管理工作方式不同)。
在阅读了大量 StackOverflow 问题并深入研究文档后,我在这些文章中找到了最接近我的问题的解决方案:
我已经使用它们设置了一个示例应用程序:https://github.com/jjconti/swift-webview-isolated
基本思想是从 WebResourceLoadDelegate 和 WebPolicyDelegate 协议中实现必要的方法,并使用 BSHTTPCookieStorage 来存储和检索 cookie。此外,我的示例应用程序允许保存 cookieStorage 对象,以便在以后的执行中重新加载它。
很遗憾,该应用程序无法在每个网站上正常运行(文章作者针对的是一个特定网站)。例如 Gmail 和 NewRelic,您在登录后(或执行某些操作后)会立即注销。这让我怀疑 cookie 存储实现中有一个我还没有找到的错误。
有人可以告诉我我是否缺少某些东西吗?
【问题讨论】:
-
我刚刚尝试了您的示例,并且能够登录 Gmail,浏览不同的标签和 Gmail 设置。转到其他页面然后返回 Gmail 也不需要重新登录。您采取了哪些措施来退出?
-
在示例的当前状态下,您会收到一条红色标记的消息,说明您尚未登录(但您已登录)并且聊天未加载。如果您取消注释此行 (github.com/jjconti/swift-webview-isolated/blob/master/…) 以启用 document.cookie cookie 处理,您将在登录后注销。
-
我认为问题可能出在您拨打
handleWebscriptCookies时。尝试在所有帧完成加载后调用它,而不是仅在 NavigationAction 之前调用它 -
WebKit.framework 不提供单独的 cookie 处理解决方案。它使用默认的共享 Cookie。如果您需要单独的 cookie,则必须找到其他人已经编写的内容或自己编写的内容。没有简单的任务。
-
@subzero 我们确实做到了。这里我们解释一下screensaver.ninja/2015/12/04/…
标签: macos cocoa cookies webview