2015-05-04 5 views
5

Я внедряю WKWebView в свое приложение. Он использует cookie сеанса PHP для идентификации пользователя. Я получаю куки сессии с помощью следующего вызова:WKWebView не отправляет сеанс cookie

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]; 

Основываясь на этом: Can I set the cookies to be used by a WKWebView? я добавить печенье к документу

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]]; 
} 

И я вручную установить куки сессии в запросе начальной загрузки:

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

Моя проблема заключается в том, что запросы AJAX не будут содержать файлы cookie сеанса.

+0

Возможно дублирование с моим ответом [здесь] (https://stackoverflow.com/a/46822550/4712692) – Xingxing

ответ

0

Возможно, ваше печенье отправлено как Set-Cookie в ответе 302. Ответьте на это YWKWebView просто вместо вашего WKWebView.

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