• iOS UIWebView 通过 cookie 完成自动登录验证


    一些说明:

    1. 通过UIWebView登录后,会自动得到web服务器设置的cookie包括服务器中的seesionid。
    2. cookie不会自动保存在app里面,需要通过设置才能在下次启动app时获取。
    3. 自动登录,需要设置header,才能将cookie带给web服务器。
    4. 自动登录,需要web服务器端进行cookie验证方可登录。

    实现流程:

    1. 做好Sign in页面后,通过get或post递交表单给web服务器,可以通过下面的代码遍历得到的cookie。 
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. NSHTTPCookieStorage *myCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];  
    2.             for (NSHTTPCookie *cookie in [myCookie cookies]) {  
    3.                 NSLog(@"%@", cookie);  
    4.             }  
    2. 为了实现自动登录,需要将cookie保存下来,以便自动登录,只需要加上一行代码。
    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. NSHTTPCookieStorage *myCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];  
    2.             for (NSHTTPCookie *cookie in [myCookie cookies]) {  
    3.                 NSLog(@"%@", cookie);  
    4.                 [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; // 保存  
    5.             }  

    3. 自动登录时,需要将上次保存的cookie取出来设置header拿给web服务器,代码如下。

    [objc] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. // 寻找URL为HOST的相关cookie,不用担心,步骤2已经自动为cookie设置好了相关的URL信息  
    2. NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:HOST]]; // 这里的HOST是你web服务器的域名地址  
    3. // 比如你之前登录的网站地址是abc.com(当然前面要加http://,如果你服务器需要端口号也可以加上端口号),那么这里的HOST就是http://abc.com  
    4.   
    5. // 设置header,通过遍历cookies来一个一个的设置header  
    6. for (NSHTTPCookie *cookie in cookies){  
    7.   
    8. // cookiesWithResponseHeaderFields方法,需要为URL设置一个cookie为NSDictionary类型的header,注意NSDictionary里面的forKey需要是@"Set-Cookie"  
    9.         NSArray *headeringCookie = [NSHTTPCookie cookiesWithResponseHeaderFields:  
    10.                                     [NSDictionary dictionaryWithObject:  
    11.                                      [[NSString alloc] initWithFormat:@"%@=%@",[cookie name],[cookie value]]  
    12.                                                                 forKey:@"Set-Cookie"]  
    13.                                                                          forURL:[NSURL URLWithString:HOST]];  
    14.   
    15. // 通过setCookies方法,完成设置,这样只要一访问URL为HOST的网页时,会自动附带上设置好的header  
    16.         [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:headeringCookie  
    17.                                                            forURL:[NSURL URLWithString:HOST]  
    18.                                                   mainDocumentURL:nil];  
    19.     }  

    4. web服务器验证app带过来的cookie信息,来完成登录。
    如果访问的页面没有cookie验证的代码,那么就访问那些*loginAction之类有验证cookie的页面再跳转,或者告诉同事在你访问的那个页面加个cookie验证登录的就行了。

    BB:转载请注明出处:http://blog.csdn.net/assholeu/article/details/38585243
  • 相关阅读:
    设计模式之单例模式实践
    有关集合的foreach循环里的add/remove
    项目中常用的MySQL优化方法--壹拾玖条
    Solr
    Lucene补充
    Lucene
    一千行 MySQL 学习笔记
    Servlet
    CSS未知宽高元素水平垂直居中
    深拷贝和浅拷贝
  • 原文地址:https://www.cnblogs.com/scycool/p/5783616.html
Copyright © 2020-2023  润新知