我一直在努力实现在macOS中每个WebView都有一个唯一的(非共享的)cookie jar的目标(iOS的cookie管理工作方式不同)。
在阅读了大量StackOverflow问题并深入阅读文档后,我在这些文章中找到了最接近我问题的解决方案:
- (如何处理HTTP cookie)
- (如何处理JavaScript文档.cookie cookie)
我使用它们设置了一个示例应用程序:https://github.com/jjconti/swift-webview-isolated
其基本思想是从WebResourceLoadDelegate和WebPolicyDelegate协议中实现必要的方法,并使用BSHTTPCookies存储来存储和检索cookie。此外,我的示例应用程序允许保存cookieStorage对象,以便在将来执行时重新加载。
不幸的是,该应用程序并不是在每个网站上都能正常工作(文章的作者针对的是一个特定的网站)。例如Gmail和NewRelic,您在登录后(或执行某些操作后)会立即注销。这让我怀疑cookie存储实现中存在一个我还没能找到的错误。
有人能告诉我是不是有什么东西不见了?
问题是没有JS级别的cookie隔离。document.cookie仍然指向共享的cookie罐。若要实现真正的cookie隔离Web视图,必须覆盖文档的cookie属性。
您可以尝试我的实现:http://cyyuen.github.io/ADCookieIsolatedWebView
它适用于使用document.cookie获取Dropbox.com等cookie的网站。但是,setter没有实现。