2016-02-16 2 views
6

В моем приложении я пытаюсь войти в систему через UIWebView. При успешном использовании файлов cookie для входа в систему установлено значение NSHTTPCookieStorage. В UIWebView открыто несколько страниц моих приложений.Сессия не поддерживается между UIWebView

Когда запрос на конкретную веб-страницу отправляется, он проверяет, был ли пользователь зарегистрирован или нет на основе файлов cookie.

Я проверил, что файлы cookie присутствуют в NSHTTPCookieStorage, но не являются допустимыми куки-файлы на сервере. То есть, он рассматривает пользователя как зарегистрированного пользователя.

Мой код для загрузки UIWebView, как показано ниже:

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

Даже я попытался с NSURLSession и настройки печенье в качестве 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.

Любая помощь будет оценена по достоинству.

Заранее спасибо

+0

Рассмотрите возможность использования 'WKWebView' (iOS 8+). С его помощью вы можете скопировать свойство 'configuration' из последнего использованного экземпляра в только что созданный и _maybe_, это сохранит файлы cookie. Кроме того, используйте _one_ экземпляр UIWebView для всего приложения. – werediver

+0

Я сталкиваюсь с аналогичной проблемой, любезно помогите –

ответ

0

Следующий код не делать то, что вы собираетесь:

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, могут быть привязаны к определенным путям в домене.

+0

Спасибо @Brian Nickel. Я решил проблему аналогичным образом, но забудьте добавить ответ –

Смежные вопросы