UIWebView 未检测到网页 cookie

Posted

技术标签:

【中文标题】UIWebView 未检测到网页 cookie【英文标题】:Webpage cookies are not detected by UIWebView 【发布时间】:2016-04-12 08:29:45 【问题描述】:

我正在开发使用 UIWebView 加载网页的 ios 应用程序

网页设置了四个cookie:

    两个用于 Google Analytics,_ga 和 _gat 一个用于我的 Web 应用程序的唯一访问者计数器 一个用于我的网页检测用户是否投票。
      如果此 cookie 可用,则显示投票结果。

来自 Firefox 的 Storage Inspector,我看到了我所有的 cookie,见截图:

但是,在 iOS 中,我从内部 webViewDidFinishLoad 打印了 NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies,并且只有四个预期 cookie 中的两个,iOS 用户也可以根据需要投票多次,因为 cookie 未被检测到(或未存储在 iOS 设备中):

if let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies 
    for c in cookies 
        print("*******************")
        print("name: \(c.name)")
        print("domain: \(c.domain)")
        print("value: \(c.value)")
        print("path: \(c.path)")
        print("expiresDate: \(c.expiresDate)")
    

为什么我的 iOS 应用没有检测到我的自定义 cookie,而只检测到我的 Google Analytics(分析)?

注意 1:我也将此代码添加到我的应用程序中:

func applicationDidBecomeActive(application: UIApplication) 
    NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always
        

注意 2:我的后端是 SharePoint Web 应用程序

【问题讨论】:

【参考方案1】:

一些想法:

设备的 Safari “阻止 Cookie”设置会覆盖对 cookieAcceptPolicy 的任何更改。设备上此设置的默认策略是“允许来自我访问的网站”,这取决于您的 iOS 设备版本,允许第三方 cookie。使用 iOS 9.3.x 进行的测试表明,第三方 cookie 使用默认设置保留在 UIWebView 中,但不会使用“仅允许来自当前网站”或“始终阻止”设置保留。

检查设备是否使用不同的 Safari cookie 设置保留您的 cookie。

此外,您的 cookie 是否设置了过期日期?我发现没有设置过期日期的 cookie 被视为UIWebView 中的会话 cookie,它只会在接收它的 Web 视图的生命周期内持续存在。

【讨论】:

我的 cookie 在 1 年后过期。所以它们不是会话 cookie。

以上是关于UIWebView 未检测到网页 cookie的主要内容,如果未能解决你的问题,请参考以下文章

当 UIPopoverController 处于活动状态时,UIWebView 未检测到点击

如何检测 uiWebView 上 javascript 操作的启动?

UIWebView 未正确加载 JavaScript - 嵌入式 Facebook 帖子

在 UIWebView 中使用进度条?

在UIWebView中检测下载

B2B网页付款时,出现“对不起,未检测到签名控件”,不能正常支付