【问题标题】:Disabling or deleting cookies in WebView without affecting other applications在 WebView 中禁用或删除 cookie 而不会影响其他应用程序
【发布时间】:2011-10-30 04:57:48
【问题描述】:

我正在解决我的 Mac OSX 10.5 应用程序中的一个问题,该问题需要在用户从应用程序注销时删除 cookie,以便其他用户无需退出应用程序即可登录。当用户第一次进行身份验证时,WebView 使用单例 cookie 存储类 NSHTTPCookieStorage 接收并缓存 5 个 cookie。当我尝试使用 [NSHTTPCookieStorage cookiesForURL:] 方法检索 cookie 时,我只得到 4 个。这意味着第 5 个与其他 URL 相关联。我无法使用域来识别 cookie,因为我可能会删除其他应用程序正在使用的 cookie。我的思路如下:

  1. 在加载 URL 时禁用 WebView 的 cookie。
    • 我曾尝试使用 [NSMutableURLRequest setHTTPShouldHandleCookies:NO] 但这没有帮助。而且我无法使用 NSHTTPCookieStorage 更改 cookie 策略,因为它会影响其他应用程序。
  2. 检索我正在加载的 URL 的 cookie
    • 我不知道这是否可能。我搜索了所有可用于 WebView 的委托方法,但没有找到任何东西
  3. 使用 [WebFrame reloadFromOrigin] 实例方法重新加载 URL
    • 这仅适用于 Mac OSX >= 10.6
  4. 重新创建 WebView 的实例
    • 没有帮助,cookie 仍然存在

我也尝试了 WebPreferences 类提供的不同选项,但这并没有帮助。提前感谢您提供解决此问题的任何提示。

【问题讨论】:

    标签: objective-c cookies


    【解决方案1】:

    您想与 Safari 共享 cookie 吗?如果没有(我假设您没有),请查看 IGIsolatedCookieWebView 以获取有关如何在 webkit 中创建自己的私有 cookie 存储的示例。

    如果您想与 Safari 共享 cookie,则需要在适当的时候使用NSHTTPCookieStorage 跟踪并删除相关 cookie。

    【讨论】:

    • 我不必与 Safari 共享 cookie。在查看 IGIsolatedCookieWebView 代码后,我找到了解决问题的方法。本质上,现在我可以通过实现 WebResourceLoadDelegate 方法并从您获得的响应中提取 cookie 来检索 NSURLRequest 的所有 cookie。我跟踪这些 cookie,然后在重新加载请求之前,我从 NSHTTPCookieStorage 中删除这些 cookie。因此,与 IGIsolatedCookieWebView 不同的是,cookie 仍在应用程序之间共享,但我能够跟踪它们的添加并在需要时删除它们。
    • @Rob Napier,嗨,你能解释一下如何在 iPhone 上的 webview 和 safari 之间共享 cookie 吗?
    • @defactodeity,你没有。 iOS 应用是沙盒的。
    猜你喜欢
    • 2019-01-20
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多