WKWebView访问时不携带Cookie的解决方案

2024-01-08 06:20:14

使用WKWebView框架开发h5的APP时,访问h5页面不携带Cookie。

经过定位,发现问题是在使用AFNetworking访问时禁用了cookie:

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];

NSHTTPCookieStorage的cookie策略状态是持久化存储的,在不删除APP的情况下,他会始终保持原来的策略。所以即便删除上述代码,更新APP,NSHTTPCookieStorage的cookie策略依然不会改变。

如果需要在不删除当前APP的情况下更改策略,只能再次执行设置策略的代码以更新策略,更新为NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain(这是NSHTTPCookieStorage的默认策略),建议在APP启动时执行:

[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain];

更新后,NSHTTPCookieStorage的cookie策略成功改变,但是WKWebView依然不携带cookie。

查询文档,发现ios17之后,WKWebView有独立的cookie管理机制。在设置关闭NSHTTPCookieStorage的cookie策略后(NSHTTPCookieAcceptPolicyNever),WKWebView的cookie策略也会被关闭。但是重新设置打开NSHTTPCookieStorage的策略(NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain),并不会同时打开WKWebView的cookie策略。

需要通过如下代码打开WKWebView的cookie策略:

if (@available(iOS 17.0, *)) {
        [[[WKWebsiteDataStore defaultDataStore] httpCookieStore] setCookiePolicy:WKCookiePolicyAllow completionHandler:^{
            
        }];
    }

这样WKWebView就可以正常携带cookie了。

文章来源:https://blog.csdn.net/cuibo1123/article/details/135447739
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。