在OS X中每个WebView单独的cookie jar


67

我一直在努力实现在macOS中每个WebView拥有唯一(不共享)cookie罐的目标(cookie管理在iOS上的工作方式不同)。

在阅读了很多StackOverflow问题并仔细阅读了文档之后,我在以下文章中找到了最接近我的问题的解决方案:

我已经使用它们建立了一个示例应用程序:https : //github.com/jjconti/swift-webview-isolated

基本思想是从WebResourceLoadDelegate和WebPolicyDelegate协议中实现必要的方法,并使用BSHTTPCookieStorage来存储和检索cookie。另外,我的示例应用程序允许保存cookieStorage对象,以便可以在以后的执行中重新加载它。

不幸的是,该应用程序无法在每个网站上正常运行(文章的作者针对的是一个特定的网站)。例如Gmail和NewRelic,您在登录后(或执行某些操作后)会立即注销。这使我怀疑cookie存储实现中的一个错误,但是我还没有找到。

有人可以告诉我是否缺少我吗?


我只是尝试了您的示例,并且能够登录Gmail,并在不同的标签和Gmail设置之间导航。同样,也可以转到其他页面然后再返回Gmail,无需重新登录。您采取了什么措施退出登录?
catlan 2015年

在示例的当前状态下,您会收到一条红色标记的消息,表明您尚未登录(但您已经登录)并且聊天未加载。如果取消注释此行(github.com/jjconti/swift-webview-isolated/blob/master/…)以启用document.cookie cookie处理,则登录后将注销。
Juanjo Conti 2015年

我认为问题可能出在您打电话时handleWebscriptCookies。尝试在所有框架加载完毕后调用它,而不是仅在NavigationAction之前调用它
Tokudu 2015年

WebKit.framework不提供单独的cookie处理解决方案。它使用默认的共享Cookie。如果您需要单独的Cookie,则必须找到别人已经写过的东西或自己动手制作。没有简单的任务。
uchuugaka 2015年

2
@subzero我们实际上做了。在这里,我们介绍了如何screensaver.ninja/2015/12/04/...
Juanjo孔蒂

Answers:


1

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

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

它适用于使用document.cookie来获取Cookie的网站,例如Dropbox.com。但是,未实现设置器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.