【问题标题】:Session is not maintained between UIWebViewUIWebView 之间不维护会话
【发布时间】:2016-02-16 10:10:09
【问题描述】:

在我的应用程序中,我试图通过 UIWebView 登录用户。成功登录后,cookie 会设置在 NSHTTPCookieStorage 中。我的应用页面很少在 UIWebView 中打开。

当发送特定网页的请求时,它会根据 cookie 检查用户是否登录。

我检查了 NSHTTPCookieStorage 中是否存在 cookie,但它们在服务器上不是有效的 cookie。也就是说,它将用户视为已注销的用户。

我的加载 UIWebView 的代码如下:

let url = serverURL + urlString
let urlRequest = NSMutableURLRequest(URL: NSURL(string: url)!)
webPage.loadRequest(urlRequest)

即使我尝试使用 NSURLSession 并将 cookie 设置为 HTTPHeaderField。下面也是我的代码:

let URLRequest: NSMutableURLRequest = NSMutableURLRequest(URL: NSURL(string: url)!)

let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookiesForURL(NSURL(string: serverURL)!)
for cookie in cookies!{
    URLRequest.setValue(cookie.value, forHTTPHeaderField: cookie.name)
}

let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: sessionConfig, delegate: self, delegateQueue: nil)

let task = session.downloadTaskWithRequest(URLRequest)
task.resume()

在少数情况下它可以正常工作。我找不到 cookie 可能存在的问题。

我们将不胜感激。

提前致谢

【问题讨论】:

  • 考虑尝试WKWebView (iOS 8+)。有了它,您可以将 configuration 属性从上次使用的实例复制到新创建的实例中,也许这将保留 cookie。或者,在整个应用程序中使用 一个 UIWebView 实例。
  • 我也遇到了类似的问题,请帮忙

标签: swift uiwebview nsurlconnection nshttpcookiestorage


【解决方案1】:

以下代码不符合您的预期:

for cookie in cookies!{
    URLRequest.setValue(cookie.value, forHTTPHeaderField: cookie.name)
}

当通过 HTTP 发送 cookie 时,它​​们以 Cookie 格式的标头发送:

Cookie: cookie1=value1; cookie2=value2

您正在创建多个标头命名 cookie 名称,因此您的请求如下所示:

cookie1: value1
cookie2: value2

创建正确标题的最简单方法是使用NSHTTPCookie.requestHeaderFieldsWithCookies(_:[NSHTTPCookie])。由于您没有添加其他标题,您可以简单地这样做:

if let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookiesForURL(NSURL(string: serverURL)!) {
    URLRequest.allHTTPHeaderFields = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies)
}

顺便说一句,您在请求和查找 cookie 时使用了不同的 URL。它们应该相同,因为 cookie 可以作用于域中的特定路径。

【讨论】:

  • 感谢@Brian Nickel。我以类似的方式解决了我的问题,但忘记添加答案
猜你喜欢
  • 1970-01-01
  • 2012-07-20
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 2013-02-10
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多