在做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
网友评论