【问题标题】:Separate cookie jar per WebView in OS XOS X 中每个 WebView 的单独 cookie jar
【发布时间】: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


【解决方案1】:

问题是没有 JS 级别的 cookie 隔离。 document.cookie 仍然指向共享的 cookie jar。要实现真正的 cookie 隔离 webview,您必须覆盖 document 的 cookie 属性。

你可以试试我的实现: http://cyyuen.github.io/ADCookieIsolatedWebView

它适用于使用 document.cookie 获取 cookie 的站点,例如 Dropbox.com。但是,setter 没有实现。

【讨论】:

    猜你喜欢
    • 2015-08-04
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多