WKWebView AJAX呼叫丢失cookie

андрейбронцек

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

借助WebView,所有功能都可以像魅力一样工作,而无需实现一行定制代码。用户登录后,默认情况下cookie被存储到cookie存储中,并且WebView始终从那里获取并使用它们,因为HTTPURLCookieStorage在NSURLSession和WebView之间共享。

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

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

您是否可以通过某种方式使授权cookie出现在AJAX调用中,您是否知道?注入javascript与

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

无效,并且似乎无法控制Javascript调用,因此我无法在执行请求之前更改请求。谢谢你。

克里斯蒂安·科夫斯塔德(Christian Kofstad)

我发现以下代码片段对我们有用。我们有同样的问题。

// 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吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章