WKWebView注入已登录的Cookie(web app保持登录)

本文介绍如何使用WKWebView实现Web应用的一次登录后自动保持登录状态。主要通过记录和使用不同HOST的cookie来达到目的。文章详细展示了如何在登录后将cookie保存到本地,并在下次启动应用时重新注入这些cookie。

需求

有一个完全是web的app项目,用WKWebView包装。在第一次登录以后,保持session有效,下次开app自动进入已登录的首页。

实现:

把要打开的URL的HOST记下来

主要是按host分别记录和使用cookie,比如:www.foo.com和www.baidu.com的cookie不能混着

- (void)viewDidLoad {
	self.toUrl = [NSURL URLWithString:@"http://foo.com:8090/xxx.html"];
    self.urlHost = self.toUrl.host;
}

登录后把cookie存在本地

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
{
    
    //本地存储
    NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
    NSMutableDictionary *cookieDic = [[NSMutableDictionary alloc] initWithDictionary:[userDefault objectForKey:self.urlHost]];

    
    //取出cookie,写进本地存储
    WKHTTPCookieStore * wkcookieStore = [WKWebsiteDataStore defaultDataStore].httpCookieStore;
    [wkcookieStore getAllCookies:^(NSArray<NSHTTPCookie *> * _Nonnull cookies) {
        NSArray* allCookis=cookies;
        for (NSHTTPCookie *cookie in allCookis) {
            NSLog(@"cookie: %@",cookie);
            [cookieDic setObject:[cookie properties] forKey:cookie.name];

        }

        [userDefault setObject:cookieDic forKey:self.urlHost];
    }];
    

    decisionHandler(WKNavigationResponsePolicyAllow);
}

把cookie注入到WKWebsiteDataStore

一定要在WKWebView实例化之前做注入

//注入cookie
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
NSDictionary*  cookieDic = [userDefault objectForKey:self.urlHost];
for (NSString *key in cookieDic) {
    NSDictionary* obj =[cookieDic objectForKey:key];
    NSHTTPCookie *cookie = [[NSHTTPCookie alloc] initWithProperties:obj];

    [[WKWebsiteDataStore defaultDataStore].httpCookieStore setCookie:cookie completionHandler:nil];
}

//注入后再实例化    
self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:webConfig];

[self.webView loadRequest:[NSURLRequest requestWithURL:self.toUrl]];

就这么简单!!!!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值