WKWebView AJAX调用丢失cookie



我们的客户最近要求我们从WebView切换到WKWebView。他们的应用程序使用本地登录,这是通过对后端进行两次POST调用来完成的,返回各种授权cookie,这些cookie后来在整个应用程序的每个HTTP/AJAX调用中使用。

使用WebView,这一切都像魅力一样工作,而不需要实现一行自定义代码。用户登录后,cookie默认存储在cookie存储中,WebView总是从那里取出它们并使用它们,因为HTTPCookieStorage在NSURLSession和WebView之间共享。

WKWebView是一个全新的故事吗?一旦我们将WebView切换到WKWebView,我们就会发现授权不起作用。这是由于丢失了一些cookie在WKWebView。我们现在存储来自NSURLSession响应的Cookie,并通过在HTTP请求中添加"Cookie"头,手动将它们附加到WKWebView中。

我们能够以这种方式获得HTTP调用的授权,但现在我们看到了一个新问题。不知何故,在WKWebView中完成的所有AJAX调用都会丢失授权cookie。

您是否知道是否有任何方法以某种方式使授权cookie也出现在AJAX调用中?用

注入javascript
javascriptCookieString = @"document.cookie = 'testCookie=testValue';";  
[self.webView evaluateJavaScript:javascriptCookieString completionHandler:nil];

没有工作,似乎对Javascript调用没有任何控制,所以我不能在执行之前更改请求。谢谢你。

我发现下面的代码片段可以满足我们的要求。我们遇到了同样的问题。

// add session cookie to ajax calls
WKUserContentController* userContentController = 
WKUserContentController.new;
WKUserScript * cookieScript = 
        [[WKUserScript alloc]                                    
        initWithSource: [[User sharedInstance] getJavscriptCookieString]                                       
        injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];

[userContentController addUserScript:cookieScript];
WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];
webViewConfiguration.userContentController = userContentController;
            webViewConfiguration.preferences.javaScriptCanOpenWindowsAutomatically = true;
_wk = [[WKWebView alloc] initWithFrame:self.view.frame configuration:webViewConfiguration];

cookie字符串需要格式化正确才能被接受。

-(NSString*) getJavscriptCookieString {
    return  [NSString stringWithFormat: @"document.cookie = '%@=%@'", [self getSessionName], [self getSessionValue]];
}

希望这能有所帮助。

参见:我可以设置WKWebView使用的cookie吗?

最新更新