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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM