MacOSX WebView 对 iframe 设置cookie 有可能失败

来源:互联网 发布:pyenv 切换python版本 编辑:程序博客网 时间:2024/05/17 07:06

在使用 WebView 实现用户登录,结果死活登录不成功,Safari 则完全没问题,对此表示很无奈,开始怀疑是否WebView 哪里设置的问题,但没找到依据。还好朋友提醒抓包试试,由于Mac 下没有找到Fiddler ,于是尝试使用 CharlesProxy 结果适用版非常恼人,而且开vpn 可能就什么都抓不到。还好有个Wireshark 有Mac 版本的,虽然开始不会用,但是之后发现功能的确很强大。

经过抓包最后发现虽然发的请求同使用Safari 基本相同,但是其中少了cookie,慢慢磨下去发现由于自己的登录页其实是在本地页面的 iframe 中。接着找到如果 iframe src 相对于main frame url 不是相同的domain 可能被认为是 third-part cookies,因此在接收登录页面的时候cookie 就有可能没权限设置或在请求时没有不发送cookie。最后通过设置cookie 的信任级别解决了问题。

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy: NSHTTPCookieAcceptPolicyAlways];
虽说这解决了问题,但一个这种方式也有些无奈,因为文档提到这会影响到所有应用程序对cookie处理方式 ,感觉有更好的方式,仍需要继续寻找。

参考:

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/Reference/Reference.html