您的位置:首页 > 移动开发

iOS UIWebView 通过 cookie 完成自动登录

2017-04-20 18:00 344 查看
1、相关介绍
iOS在UIWebView中获取的cookie的方法:NSHTTPCookieStorage
* nCookies = [
NSHTTPCookieStorage
sharedHTTPCookieStorage];
再具体获取某个域的cookieNSArray*
cookiesURL = [nCookies
cookiesForURL:[NSURL
URLWithString:@"你的URL"]];
通过[[NSHTTPCookieStorage
sharedHTTPCookieStorage
setCookie:userCookie]方法将 cookies来保存起来,但是这样虽然可以保存cookies但是你应用退出之后还是会丢失(其实是cookies过期的问题),做好的方法是把cookies放到NSUserDefaults保存起来.

2、实现

1.在UIWebView的代理方法中实现获取cookies并将cookies放到NSUserDefaults保存起来:-
(void)webViewDidFinishLoad:(UIWebView*)webView中写入
- (void)webViewDidFinishLoad:(UIWebView*)webView{
   
   
NSArray *nCookies = [[NSHTTPCookieStoragesharedHTTPCookieStorage]
cookies];
   
for (NSHTTPCookie *cookie
in nCookies){
       
if ([cookie isKindOfClass:[NSHTTPCookie
class]]){
           
           
if ([cookie.name isEqualToString:@"PHPSESSID"]) {
               
NSNumber *sessionOnly =[NSNumber numberWithBool:cookie.sessionOnly];
               
NSNumber *isSecure = [NSNumber numberWithBool:cookie.isSecure];
               
NSArray *cookies = [NSArray arrayWithObjects:cookie.name, cookie.value, sessionOnly, cookie.domain,
cookie.path, isSecure,
nil];
                [[NSUserDefaults
standardUserDefaults]
setObject:cookies forKey:@"cookies"];
               
break;
           }
       }
   }
}

2.获取cookies:运行之后,UIWebView加载url之前获取保存好的cookies,并设置cookies,

NSArray *cookies =[[NSUserDefaults
standardUserDefaults] 
objectForKey:@"cookies"];
   
if (cookies.count >0) {
       
NSMutableDictionary *cookieProperties = [NSMutableDictionarydictionary];
        [cookieProperties
setObject:[cookies
objectAtIndex:0]
forKey:NSHTTPCookieName];
        [cookieProperties
setObject:[cookies
objectAtIndex:1]
forKey:NSHTTPCookieValue];
        [cookieProperties
setObject:[cookies
objectAtIndex:3]
forKey:NSHTTPCookieDomain];
        [cookieProperties
setObject:[cookies
objectAtIndex:4]
forKey:NSHTTPCookiePath];
       
NSHTTPCookie *cookieuser = [NSHTTPCookiecookieWithProperties:cookieProperties];
        [[NSHTTPCookieStorage
sharedHTTPCookieStorage] 
setCookie:cookieuser];
    }
注意:要在[self.webView loadRequest:req];之前设置获取cookies!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: