保證可行!兩步實現(xiàn)iOS UIWebView 通過 cookie 完成自動登錄。

這兩天有個項目需求,在網(wǎng)上找了好多博文都不可以拿來就能實現(xiàn)(對于伸手黨怎么能行),為了避免浪費大家的時間我在這里給出一份一定可行的方法:

1、相關(guān)知識點介紹

  1. iOS在UIWebView中獲取的cookie的方法:NSHTTPCookieStorage * nCookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]
  2. 再具體獲取某個域的餅干:NSArray* cookiesURL = [nCookies cookiesForURL:[NSURL URLWithString:@“你的URL”]];
  3. 通過[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie]方法將 cookies來保存起來,但是這樣雖然可以保存cookies但是你應(yīng)用退出之后還是會丟失(其實是cookies過期的問題),做好的方法是把cookies放到NSUserDefaults保存起來:

2、實現(xiàn)方法

  • 簡單粗暴直接上碼:GitHub Demo歡迎star, 你的star就是對我最好的鼓勵.
    1.在UIWebView的代理方法中實現(xiàn)獲取cookies并將cookies放到NSUserDefaults保存起來:(void)webViewDidFinishLoad:(UIWebView *)webView中寫入
    需要注意的是你的CookieName
 NSArray *nCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
    NSHTTPCookie *cookie;
    for (id c in nCookies)
    {
        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:@"cookies"];
                break;
            }
        }
    }

2.獲取cookies:運行之后,UIWebview加載url之前獲取保存好的cookies,并設(shè)置cookies,

 NSArray *cookies =[[NSUserDefaults standardUserDefaults]  objectForKey:@"cookies"];
        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];

注意:要在[self.webView loadRequest:req];之前設(shè)置獲取cookies!
到現(xiàn)在為止你的應(yīng)用肯定就已經(jīng)實現(xiàn)了你想要的功能!
感謝樓下@440bd488f596這位同學(xué)提供的新方案,供大家參考:

NSArray *headeringCookie = [NSHTTPCookie cookiesWithResponseHeaderFields:
[NSDictionary dictionaryWithObject:
[[NSString alloc] initWithFormat:@"token=%@;",self.token]
forKey:@"Set-Cookie"]
forURL:url];

(其中連接上面實現(xiàn)的稍微有些問題,我在我這里已經(jīng)進(jìn)行了修改)功能實現(xiàn)參考鏈接

                                                                             ----By ZPengs
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容