天天看點

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。

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