Ank*_*hah 6 uiwebview nsurlconnection swift nshttpcookiestorage
在我的应用程序中,我正在尝试通过UIWebView登录用户.成功登录后,将设置cookie NSHTTPCookieStorage.我的应用页面很少在UIWebView中打开.
当发送特定网页的请求时,它会根据cookie检查用户是否登录.
我检查过哪些cookie存在NSHTTPCookieStorage,但服务器上没有有效的cookie.也就是说,它将用户视为已注销的用户.
我加载UIWebView的代码如下:
let url = serverURL + urlString
let urlRequest = NSMutableURLRequest(URL: NSURL(string: url)!)
webPage.loadRequest(urlRequest)
Run Code Online (Sandbox Code Playgroud)
甚至我尝试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()
Run Code Online (Sandbox Code Playgroud)
它适用于少数情况.我无法找到cookie的问题.
任何帮助将不胜感激.
提前致谢
以下代码没有达到您的预期:
for cookie in cookies!{
URLRequest.setValue(cookie.value, forHTTPHeaderField: cookie.name)
}
Run Code Online (Sandbox Code Playgroud)
当通过 HTTP 发送 cookie 时,它们以Cookie以下格式的标头发送:
for cookie in cookies!{
URLRequest.setValue(cookie.value, forHTTPHeaderField: cookie.name)
}
Run Code Online (Sandbox Code Playgroud)
您正在创建多个名为 cookie 名称的标头,因此您的请求如下所示:
Cookie: cookie1=value1; cookie2=value2
Run Code Online (Sandbox Code Playgroud)
创建正确标头的最简单方法是使用NSHTTPCookie.requestHeaderFieldsWithCookies(_:[NSHTTPCookie]). 由于您没有添加其他标头,因此您可以简单地执行以下操作:
if let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookiesForURL(NSURL(string: serverURL)!) {
URLRequest.allHTTPHeaderFields = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies)
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您使用不同的 URL 来发送请求和查找 cookie。它们应该与 cookie 的范围相同,可以将范围限定为域中的特定路径。
| 归档时间: |
|
| 查看次数: |
2617 次 |
| 最近记录: |