UIWebView 未检测到网页 cookie
Webpage cookies are not detected by UIWebView
我正在开发 iOS 使用 UIWebView
加载网页的应用程序
网页设置了四个cookies:
- 两个用于 Google 分析,_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 分析 cookie?
注意 1:我也已将这段代码添加到我的应用程序中:
func applicationDidBecomeActive(application: UIApplication) {
NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always
}
注意 2:我的后端是 SharePoint Web 应用程序
一些想法:
设备的 Safari "Block Cookies" 设置会覆盖对 cookieAcceptPolicy
的任何更改。设备上此设置的默认策略是 "Allow from Websites I Visit,",这取决于您的 iOS 设备版本,允许第三方 cookie。使用 iOS 9.3.x 进行的测试表明,第三方 cookie 以默认设置保存在 UIWebView
中,但不保存设置 "Allow from Current Website Only" 或 "Always Block."
检查设备是否使用不同的 Safari cookie 设置保留您的 cookie。
此外,您的 cookie 是否设置了过期日期?我发现未设置过期日期的 cookie 在 UIWebView
中被视为会话 cookie,它仅在接收它的 Web 视图的生命周期内持续存在。
我正在开发 iOS 使用 UIWebView
网页设置了四个cookies:
- 两个用于 Google 分析,_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 分析 cookie?
注意 1:我也已将这段代码添加到我的应用程序中:
func applicationDidBecomeActive(application: UIApplication) {
NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = NSHTTPCookieAcceptPolicy.Always
}
注意 2:我的后端是 SharePoint Web 应用程序
一些想法:
设备的 Safari "Block Cookies" 设置会覆盖对 cookieAcceptPolicy
的任何更改。设备上此设置的默认策略是 "Allow from Websites I Visit,",这取决于您的 iOS 设备版本,允许第三方 cookie。使用 iOS 9.3.x 进行的测试表明,第三方 cookie 以默认设置保存在 UIWebView
中,但不保存设置 "Allow from Current Website Only" 或 "Always Block."
检查设备是否使用不同的 Safari cookie 设置保留您的 cookie。
此外,您的 cookie 是否设置了过期日期?我发现未设置过期日期的 cookie 在 UIWebView
中被视为会话 cookie,它仅在接收它的 Web 视图的生命周期内持续存在。