Сессия не поддерживается между UIWebView
В моем приложении я пытаюсь войти в систему через UIWebView. При успешном входе в систему устанавливаются куки NSHTTPCookieStorage
, Немногие страницы моего приложения открыты в UIWebView.
Когда отправляется запрос на определенную веб-страницу, он проверяет, вошел ли пользователь в систему или нет, основываясь на файлах cookie.
Я проверил, что куки присутствуют в NSHTTPCookieStorage
, но не являются действительными куки на сервере. То есть пользователь считает пользователя, вышедшего из системы.
Мой код для загрузки 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.
Любая помощь будет оценена.
заранее спасибо
1 ответ
Следующий код не делает то, что вы намереваетесь:
for cookie in cookies!{
URLRequest.setValue(cookie.value, forHTTPHeaderField: cookie.name)
}
Когда куки отправляются по HTTP, они отправляются в 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)
}
Кроме того, вы используете разные URL-адреса для запроса и поиска файлов cookie. Они должны быть такими же, как файлы cookie, могут быть определены по определенным путям в домене.