2016-02-16 12 views
6

verwaltet In meiner App versuche ich Benutzer über UIWebView anmelden. Bei erfolgreicher Anmeldung werden Cookies in NSHTTPCookieStorage gesetzt. Nur wenige meiner App-Seiten sind in UIWebView geöffnet.Sitzung wird nicht zwischen UIWebView

Wenn eine Anfrage für eine bestimmte Webseite gesendet wird, überprüft sie anhand der Cookies, ob der Benutzer angemeldet ist oder nicht.

Ich habe überprüft, dass Cookies in NSHTTPCookieStorage vorhanden sind, aber keine gültigen Cookies auf dem Server sind. Das heißt, Benutzer wird als abgemeldeter Benutzer betrachtet.

zum Laden UIWebView Mein Code ist wie folgt:

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

Auch habe ich versucht, mit NSURLSession und Cookies als HTTPHeaderField Einstellung. Unten ist auch mein Code dafür:

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() 

Es funktioniert für einige Fälle richtig. Ich kann nicht herausfinden, was ein Problem mit den Cookies sein kann.

Jede Hilfe wird geschätzt.

Vielen Dank im Voraus

+0

Versuchen Sie, 'WKWebView' (iOS 8+) zu versuchen. Damit können Sie 'configuration' -Eigenschaften von der zuletzt verwendeten Instanz in eine neu erstellte kopieren und _maybe_ dadurch Cookies speichern. Alternativ können Sie _one_ instance von UIWebView in der gesamten App verwenden. – werediver

+0

Ich bin vor ähnlichen Problem, bitte helfen –

Antwort

0

Der folgende Code nicht tut, was Sie beabsichtigen:

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

Wenn Cookies über HTTP gesendet werden, werden sie in einem Cookie Header des Format gesendet werden:

Cookie: cookie1=value1; cookie2=value2 

Sie erstellen mehrere Header die Cookie-Namen benannt, so dass Ihre Anfrage wie folgt aussieht:

cookie1: value1 
cookie2: value2 

Der einfachste Weg, um die richtigen Header zu erstellen, ist mit NSHTTPCookie.requestHeaderFieldsWithCookies(_:[NSHTTPCookie]). Da Sie keine anderen Header hinzugefügt haben, können Sie einfach tun:

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

Als Nebenwirkung werden Sie verschiedene URLs für Ihre Anfrage verwenden und für die Cookies nach oben. Sie sollten identisch sein mit Cookies, die auf bestimmte Pfade in einer Domäne beschränkt sind.

+0

Danke @Brian Nickel. Ich habe mein Problem auf ähnliche Weise gelöst, aber vergessen Sie, die Antwort hinzuzufügen –