uiwebview通过cookie自动登录
2015-07-26 21:03
351 查看
这两天弄uiwebview通过通过cookie自动登录,搞的昏头转向,各种查资料,发帖子,到q群里面问,终于弄出来,在此记录下来,以备以后有用。
ios中获取cookies的方法:NSHTTPCookieStorage *nCookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
再具体获取某个域的cookies:NSArray *cookiesURL = [nCookies cookiesForURL:[NSURL URLWithString:yourURL]];
把yourURL换成你的网址就能获取到cookies了。
保存cookies:
网上说可以通过 [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie: cookies]来保存cookies,但是我发现,即使这样设置之后再app退出之后,该cookies还是丢失了(后来解决了:其实是cookies过期的问题,见我的博客”ios
app退出后cookies丢失的解决方法“:http://blog.csdn.net/gx_wqm/article/details/47086181),所以就在程序进入后台之后把改cookies通过NSUserDefaults保存起来:
-(void)saveSessID{
NSHTTPCookie *cookie;
NSHTTPCookieStorage *nCookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookiesURL = [nCookies cookiesForURL:[NSURL URLWithString:Your_URL]];
for (id c in cookiesURL)
{
if ([c isKindOfClass:[NSHTTPCookie class]])
{
cookie=(NSHTTPCookie *)c;
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:@"abcdef"];
break;
}
}
}
}
PHPSESSID:具体是不是这个,问一下做后台的。
abcdef:随便取,只要不和已存在的一样就行了。
获取cookies:
程序起来之后,uiwebview加载url之前获取保存好的cookies,并设置cookies,
NSArray *cookies =[[NSUserDefaults standardUserDefaults] objectForKey:@"abcdef"];
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[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 = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookieuser];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:yourUrl]];
[_webView loadRequest:request]; //loadRequest会自动带上设置的cookies!
[self.view addSubview:_webView];
一定要在 [_webView loadRequest:request]; 之前设置cookies!
在登录账号,退出app,在启动app,看是不是自动登录!(还不行:请联系我qq:1246489125)
ios中获取cookies的方法:NSHTTPCookieStorage *nCookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
再具体获取某个域的cookies:NSArray *cookiesURL = [nCookies cookiesForURL:[NSURL URLWithString:yourURL]];
把yourURL换成你的网址就能获取到cookies了。
保存cookies:
网上说可以通过 [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie: cookies]来保存cookies,但是我发现,即使这样设置之后再app退出之后,该cookies还是丢失了(后来解决了:其实是cookies过期的问题,见我的博客”ios
app退出后cookies丢失的解决方法“:http://blog.csdn.net/gx_wqm/article/details/47086181),所以就在程序进入后台之后把改cookies通过NSUserDefaults保存起来:
-(void)saveSessID{
NSHTTPCookie *cookie;
NSHTTPCookieStorage *nCookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookiesURL = [nCookies cookiesForURL:[NSURL URLWithString:Your_URL]];
for (id c in cookiesURL)
{
if ([c isKindOfClass:[NSHTTPCookie class]])
{
cookie=(NSHTTPCookie *)c;
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:@"abcdef"];
break;
}
}
}
}
PHPSESSID:具体是不是这个,问一下做后台的。
abcdef:随便取,只要不和已存在的一样就行了。
获取cookies:
程序起来之后,uiwebview加载url之前获取保存好的cookies,并设置cookies,
NSArray *cookies =[[NSUserDefaults standardUserDefaults] objectForKey:@"abcdef"];
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
[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 = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookieuser];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:yourUrl]];
[_webView loadRequest:request]; //loadRequest会自动带上设置的cookies!
[self.view addSubview:_webView];
一定要在 [_webView loadRequest:request]; 之前设置cookies!
在登录账号,退出app,在启动app,看是不是自动登录!(还不行:请联系我qq:1246489125)
相关文章推荐
- 它们的定义iOS双击Home截图按键开关
- Unity插件
- Unity中处理json数据(插件litjson和自带JsonUtility的两种)
- iOS-NSDate之今天,昨天,这周,这个月,上个月
- [转]Android Volley完全解析(四),带你从源码的角度理解Volley
- android dex中method及field 65536打包问题
- Unity打飞机小游戏
- android ImageButton使用形状非方形的png图片但却显示出正方形白边的情况
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记39 Alert&ActionSheet
- Swift学习笔记(十)——Swift对数据溢出的智能检查
- UVA 299 Train Swapping
- Android Gradle Plugin指南(三)----依赖关系,Android库和多项目设置
- Swift学习笔记(九)——整型Int在Swift中表示的最大值最小值问题
- [UnityShaderCookbook 读书笔记] [02] 光照模型
- iostream
- Android Gradle Plugin指南(一)——简介 - 琴弦第七的专栏 - 博客频道 - CSDN.NET
- Android Gradle Plugin指南(二)——基本项目 - 琴弦第七的专栏 - 博客频道 - CSDN.NET
- IOS文件下载
- iOS编程——Swift实现一个不断渐变的圆环
- IOS存储目录documents你在哪里啊