一些說明:
- 通過UIWebView登錄后,會自動得到web服務器設置的cookie包括服務器中的seesionid。
- cookie不會自動保存在app里面,需要通過設置才能在下次啟動app時獲取。
- 自動登錄,需要設置header,才能將cookie帶給web服務器。
- 自動登錄,需要web服務器端進行cookie驗證方可登錄。
實現流程:
1. 做好Sign in頁面后,通過get或post遞交表單給web服務器,可以通過下面的代碼遍歷得到的cookie。
- NSHTTPCookieStorage *myCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];
- for (NSHTTPCookie *cookie in [myCookie cookies]) {
- NSLog(@"%@", cookie);
- }
2. 為了實現自動登錄,需要將cookie保存下來,以便自動登錄,只需要加上一行代碼。
- NSHTTPCookieStorage *myCookie = [NSHTTPCookieStorage sharedHTTPCookieStorage];
- for (NSHTTPCookie *cookie in [myCookie cookies]) {
- NSLog(@"%@", cookie);
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; // 保存
- }
3. 自動登錄時,需要將上次保存的cookie取出來設置header拿給web服務器,代碼如下。
- // 尋找URL為HOST的相關cookie,不用擔心,步驟2已經自動為cookie設置好了相關的URL信息
- NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:HOST]]; // 這里的HOST是你web服務器的域名地址
- // 比如你之前登錄的網站地址是abc.com(當然前面要加http://,如果你服務器需要端口號也可以加上端口號),那么這里的HOST就是http://abc.com
- // 設置header,通過遍歷cookies來一個一個的設置header
- for (NSHTTPCookie *cookie in cookies){
- // cookiesWithResponseHeaderFields方法,需要為URL設置一個cookie為NSDictionary類型的header,注意NSDictionary里面的forKey需要是@"Set-Cookie"
- NSArray *headeringCookie = [NSHTTPCookie cookiesWithResponseHeaderFields:
- [NSDictionary dictionaryWithObject:
- [[NSString alloc] initWithFormat:@"%@=%@",[cookie name],[cookie value]]
- forKey:@"Set-Cookie"]
- forURL:[NSURL URLWithString:HOST]];
- // 通過setCookies方法,完成設置,這樣只要一訪問URL為HOST的網頁時,會自動附帶上設置好的header
- [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:headeringCookie
- forURL:[NSURL URLWithString:HOST]
- mainDocumentURL:nil];
- }
4. web服務器驗證app帶過來的cookie信息,來完成登錄。
如果訪問的頁面沒有cookie驗證的代碼,那么就訪問那些*loginAction之類有驗證cookie的頁面再跳轉,或者告訴同事在你訪問的那個頁面加個cookie驗證登錄的就行了。
BB:轉載請注明出處:http://blog.csdn.net/assholeu/article/details/38585243