iOS程序员iOS程序猿

iOS—webView自动登录

2017-11-22  本文已影响91人  Cy_Star

在做webApp开发的时候,很多都登录的操作页面也是HMTL页面,那么有时候这些登录页面没有做一个保存本地化数据,下次打开webApp用户部分是未登录状态,而且还要重新输入账号密码,这样对与用户来说是烦的一件事。

那么解决这种办法:一个是网页端去做一个本地化的保存操作;另一种就是我们在webView 去做一个cookie 的保存操作,接下来就讲一下cookie 保存登录信息实现自动登录。

但是很多人都尝试过使用cookie去做,但是肯定有一部分遇到过cookie 过一段时间后无法执行自动登录的操作了,是因为cookie 是有一个过期时间的;那么这个时候就要cookie 存放的数据信息存放到 NSUserDefaults 当中。

一、webView在执行网络请求之前要先获取cookie

#pragma mark  ----------------------------获取cookies-------------------------------------------
if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]allValues]containsObject:@"cookies"]) {
    
    NSArray * cookies = [[NSUserDefaults standardUserDefaults]objectForKey:@"cookies"];
    if (cookies.count > 0) {
        
        NSLog(@"cookies.count = %lu",(unsigned long)cookies.count);
        NSMutableDictionary * cookiePro = [NSMutableDictionary dictionary];
        [cookiePro setObject:[cookies objectAtIndex:0] forKey:NSHTTPCookieName];
        [cookiePro setObject:[cookies objectAtIndex:1] forKey:NSHTTPCookieValue];
        [cookiePro setObject:[cookies objectAtIndex:3] forKey:NSHTTPCookieDomain];
        [cookiePro setObject:[cookies objectAtIndex:4] forKey:NSHTTPCookiePath];
        
        NSHTTPCookie * cookieUser = [NSHTTPCookie cookieWithProperties:cookiePro];
        
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookieUser];
    }
}

二、在webView 运行时的代理方法做操作

 //WKWebView
 - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
{
        NSArray * AyCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage]cookies];
        for (NSHTTPCookie * cookie in AyCookies) {
            
            //这里输出保存登录的信息,
             NSLog(@"cookie  =  %@",cookie);  

            if ([cookie isKindOfClass:[NSHTTPCookie class]]) {
        
                    if ([cookie.name isEqualToString:@"PHPSESSID"]) {
                          NSNumber * only = [NSNumber numberWithBool:cookie.sessionOnly];
                          NSNumber * secure = [NSNumber numberWithBool:cookie.isSecure];
                           NSArray * cookies = [NSArray arrayWithObjects:cookie.name, cookie.value,only,cookie.domain,cookie.path,secure,nil];
                            [[NSUserDefaults standardUserDefaults]setObject:cookies forKey:@"cookies"];
                          break;
                      }
              }
         }
}
//UIWebView 在这里去执行
- (void)webViewDidFinishLoad:(UIWebView *)webView
{

}

图下输出测试保存在cookie中的登录信息


图1.jpg
上一篇下一篇

猜你喜欢

热点阅读