2015-05-04 43 views
5

Osadzam WKWebView w mojej aplikacji. Używa pliku cookie sesji PHP do identyfikacji użytkownika. I dostać ciasteczko sesji z poniższej rozmowy:WKWebView nie wysyła pliku cookie sesji

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; 
[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:[NSJSONSerialization dataWithJSONObject:jsonobject options:0 error:&err]]; 
NSHTTPURLResponse *response = nil; 
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 

opiera się na tym: Can I set the cookies to be used by a WKWebView? dodam cookies do dokumentu

for (NSHTTPCookie* cookie in [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies) 
{ 
    NSString *javascript = [NSString stringWithFormat:@"document.cookie = '%@=%@';", [cookie name], [cookie value]]; 
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; 
    WKUserContentController *ucController = [[WKUserContentController alloc] init]; 
    WKProcessPool *processPool = [[WKProcessPool alloc] init]; 
    config.processPool = processPool; 
    config.userContentController = ucController; 
    [ucController addUserScript:[[WKUserScript alloc] initWithSource:javascript injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO]]; 
} 

I ręcznie ustawić ciasteczko sesji w pierwotnym wniosku obciążenia:

NSMutableURLRequest *pageLoadRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; 
[pageLoadRequest setHTTPMethod:@"GET"]; 
[pageLoadRequest setHTTPShouldHandleCookies:YES]; 
[pageLoadRequest setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:[NSHTTPCookieStorage sharedHTTPCookieStorage].cookies]]; 
[_webView loadRequest:pageLoadRequest]; 

Mój problem polega na tym, że żądania AJAX nie zawierają pliku cookie sesji.

+0

Być może duplikat z moją odpowiedzią [tutaj] (https://stackoverflow.com/a/46822550/4712692) – Xingxing

Odpowiedz

0

Być może pliki cookie są wysyłane jako odpowiedź Set-Cookie. Spróbuj tego YWKWebView po prostu zastąpić swoją WKWebView.