iOS—webView自动登录

作者: Cy_Star | 来源:发表于2017-11-22 15:02 被阅读91次

    在做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

    相关文章

      网友评论

        本文标题:iOS—webView自动登录

        本文链接:https://www.haomeiwen.com/subject/pagnvxtx.html