【问题标题】:How can I have multiple instances of webkit without sharing cookies?如何在不共享 cookie 的情况下拥有多个 webkit 实例?
【发布时间】:2008-12-12 21:34:29
【问题描述】:

我有一个创建几个 WebView 实例的应用,我想让它们尽可能独立地运行。

至少,我不希望他们共享 cookie。快速的谷歌搜索给了我类似“你不能”的结果。我希望有人有更好的答案。

【问题讨论】:

    标签: objective-c macos webkit


    【解决方案1】:

    基本答案是“你不能”。

    看了一会儿,我认为这是可能的,但非常复杂。这将涉及在您的 WebView 上实现一个 resourceLoadDelegate,它实现 -webView:resource:willSendRequest:redirectResponse:fromDataSource: 并修改请求以关闭 HTTPShouldHandleCookies 并手动将任何相关 cookie 添加到请求中。它还必须实现-webView:resource:didReceiveResponse:fromDataSource: 以了解从服务器返回的任何cookie。您可以为每个 webview 分配/初始化您自己的 NSHTTPCookieStorage 副本,并使用它来存储/检索 cookie。

    【讨论】:

    • 嘿。太棒了。我最终更改了 Web 服务以解决我遇到的问题。我希望这很常见(私人模式、多用户测试等)。感谢您对此进行调查。
    • 我实际上实现了一个 WebView 子类,它使用此答案中描述的方法来执行此操作。 igisolatedcookiewebview.googlecode.com(新 BSD 许可证)。
    • @Isaac 哇,非常适合我的需要。我注意到的一个问题是在您的 .m 文件的第 152 行(初始化 cookieStore 数组),如果您使用 ARC 并删除保留调用,它会崩溃。我只需要在该文件上使用 -fno-objc-arc。
    • 此解决方案无法正确处理由 js document.cookie 设置的 cookie,是吗?
    • 我发现一个项目试图解决这个问题,它声称它可以同时处理请求级别和 JS 级别的 cookie。 github.com/cyyuen/ADCookieIsolatedWebView
    【解决方案2】:

    This post 总结了你能做什么。我不确定这对您是否可行,我觉得这不是一项简单的任务,甚至可能有风险,但它似乎是可能的:作者声称 iCab 就是这样做的。

    我也希望有一个更简单的解决方案,真的。当然,由于 Webkit 是开源的,我猜你可以推出自己的框架版本并改变行为?

    【讨论】:

      【解决方案3】:

      我假设 cookie 将在服务/应用程序级别配置,而不是针对特定实例或进程。也许您可以修改您的问题以找到解决您遇到的问题的方法,该问题要求实例不共享 cookie。

      实例之间不共享 cookie 的动机是什么?

      如果您只需要对同一网络资源进行 3 个视图,您可以设置一些指向同一数据源的虚拟主机。

      【讨论】:

      • WebView 是 webkit 的浏览器视图。我实际上有两个窗口在查看同一个网页,我希望它们不要使用同一个会话。
      【解决方案4】:

      您可以做的是查看libcurl,它可以处理不与 URL 加载系统范围的 cookie 存储混合的 cookie 存储,用于您想要分离的那些请求。对我来说,这似乎是一个有效且简单的解决方案。如果你真的需要依赖 webview/webkit,它可能不会。

      【讨论】:

      • 是的,webviw 的东西对我来说非常重要。我可能仍然可以成功,但希望避免重写世界。我最终改变了服务器。 叹息
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 2011-04-10
      • 2016-05-11
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      相关资源
      最近更新 更多