UIWebView

时间:2016-04-12 08:29:46

标签: ios cookies sharepoint uiwebview

我正在开发使用UIWebView

加载网页的iOS应用

网页设置了四个Cookie:

  1. 两个用于Google Analytics,_ga和_gat
  2. 一个用于我的Web应用程序的独特的游标计数器
  3. 一个用于检测用户是否已投票的网页。
    1. 如果此cookie可用,则显示投票结果。
  4. 来自Firefox的Storage Inspector我按预期看到了所有Cookie,请参见屏幕截图:

    enter image description here

    然而,从iOS我在NSHTTPCookieStorage.sharedHTTPCookieStorage().cookies内打印webViewDidFinishLoad并且只有两个预期的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)")
        }
    }
    

    enter image description here

    为什么我的iOS应用检测不到我的自定义Cookie并且仅检测到我的Google Analytics?

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

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

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

1 个答案:

答案 0 :(得分:0)

一些想法:

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

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

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