我一直在努力实现在macOS中每个WebView拥有一个独特(不共享)cookie jar的目标(Cookie管理在iOS中的工作方式不同).
在阅读了大量StackOverflow问题并深入研究文档后,我在这些文章中找到了最接近我问题的解决方案:
我已经使用它们设置了一个示例应用程序:https://github.com/jjconti/swift-webview-isolated
基本思想是从WebResourceLoadDelegate和WebPolicyDelegate协议实现必要的方法,并使用BSHTTPCookieStorage存储和检索cookie.此外,我的示例应用程序允许保存cookieStorage对象,以便在将来的执行中重新加载它.
不幸的是,该应用程序在每个网站都无法正常工作(文章的作者针对的是某个特定的网站).例如Gmail和NewRelic,您在登录后(或执行某些操作后)立即注销.这让我怀疑cookie存储实现中的一个错误,我还没有找到.
有人能告诉我是否有什么东西我不见了?
我有一个创建了几个WebView实例的应用程序,我希望它们尽可能独立运行.
至少,我不希望他们共享cookie.一个快速的谷歌搜索给了我喜欢"你不能"的结果.我希望有人有更好的答案.
我要问你.
1:我UIWebView在我的iPhone App中使用s.我不希望用户能够在新闻中添加评论.但是,要评论他们必须登录.
如果没有,我怎么能接受UIWebViews中的cookies ?
2:创建的cookie是否UIWebView可以在UIWebView其他视图中的其他视图中使用?
例如:我有我的LoginViewController,有嵌入式UIWebView,我的用户可以登录/注销.如果他们在此视图中登录,cookie仍然可用于CommentViewController?
如果没有,我怎么能做到这一点?
提前致谢 !
背景
我正在开发一个简单的iPad应用程序,允许用户同时浏览具有不同登录的同一网站.因此我有两个UIWebView,他们应该有不同的cookie存储,所以用户可以在第一个帐户登录UIWebView,另一个帐户登录UIWebView.
我试过了什么?
我认为解决方案是在UIWebView我拥有的两个中实现不同的cookie存储.
Sasmito Adibowo写了一篇文章实现自己的Cookie存储,它提供了有关如何WebView在Mac上使用自定义cookie存储的详细信息.
这是通过修改WebView要发送的NSURLRequest,向其添加cookie标头,并WebView从响应头拦截响应并从中提取cookie并将其保存到我们自己的cookie存储中来完成的.
从技术上讲,它是通过实现这两个委托方法来完成的:
- (void)webView:(WebView *)sender resource:(id)identifier didReceiveResponse:(NSURLResponse *)response fromDataSource:(WebDataSource *)dataSource
- (NSURLRequest *)webView:(WebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(WebDataSource *)dataSource
Run Code Online (Sandbox Code Playgroud)
虽然它没有记录,UIWebView但确实支持上述方法之一,方法名称略有不同:
- (NSURLRequest *)uiWebView:(UIWebView *)sender resource:(id)identifier willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse fromDataSource:(id)dataSource
Run Code Online (Sandbox Code Playgroud)
但是,UIWebView没有等效的委托方法webView:resource:didReceiveResponse:fromDataSource:,因此我无法从响应标头中提取cookie.
问题
有没有办法必须UIWebView使用自定义cookie存储,所以这两个UIWebView可以拥有自己的cookie存储?
谢谢!