ios webview 加載鏈接攜帶cookie

ios 中有的請求需要帶cookie, ?驗證登陸等.?

?ios默認是會把url 的cookie保存到本地, 但不是實時保存的, 會有延遲, 一般理解為在系統(tǒng)空閑時去保存 . ?所以為了實時給url添加cookie, 我們最好將請求url 后獲取到的cookie 保存到本地, 用NSUserDefault即可

在設置Cookie之前,先讓我們了解一下通用Cookie格式,多個Cookie的格式通常為:cookie1=value1; cookie2=value2; cookie3=value3;

這里特別要注意,多個cookie之間用分號+空格分隔開,不是&也不是單純的空格。我所了解到的iOS設置Cookie的方法有兩種,分別如下。

方法一:

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",YourURL]]];

NSMutableString *cookieString = [[NSMutableString alloc]init];

[cookieString appendFormat:@"userid=%@;",@"xxxx"];

[cookieString appendFormat:@"sessionid=%@;",@"xxxx"];

[cookieString appendFormat:@"nickname=%@;",@"xxxx"];

[req setValue:cookieString forHTTPHeaderField:@"Cookie"];

方法二:

NSDictionary *properties1 = [NSDictionary dictionaryWithObjectsAndKeys:

@"domain.com", NSHTTPCookieDomain,

@"/", NSHTTPCookiePath,

@"userid", NSHTTPCookieName,

@"tangtang", NSHTTPCookieValue, nil];

NSDictionary *properties2 = [NSDictionary dictionaryWithObjectsAndKeys:

@"domain.com", NSHTTPCookieDomain,

@"/", NSHTTPCookiePath,

@"pid", NSHTTPCookieName,

@"xiaotang", NSHTTPCookieValue,

nil];

NSHTTPCookie *cookie1 = [NSHTTPCookie cookieWithProperties:properties1];

NSHTTPCookie *cookie2 = [NSHTTPCookie cookieWithProperties:properties2];

NSArray* cookies = [NSArray arrayWithObjects:cookie1, cookie2, nil];

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];

request.allHTTPHeaderFields = headers; //這句才是關鍵

注意: 一定要把cookie設置到request.allHTTPHeaderFields中才會生效.

網(wǎng)上好多的demo都是這樣設置cookie的 --- ? [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; ? ? ? ? 親測不能用


update ?于當天下午

現(xiàn)在是這樣, 要在每一次請求的時候都要帶cookie, 如果要按上面那種寫法之有在第一次請求的時候帶cookie, 其他請求都帶不上了, ?

解決方法 :

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

{

NSString *urlString = [[request URL] absoluteString];

NSLog(@"urlString = %@",urlString);

NSMutableURLRequest *mutableRequest = [request mutableCopy];

NSDictionary *requestHeaders = request.allHTTPHeaderFields;

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

// 判斷請求頭是否已包含,如果不判斷該字段會導致webview加載時死循環(huán)

if (!requestHeaders[@"Cookie"]) {

NSString *ticket = [userDefaults objectForKey:MMH_USER_DEFAULT_USER_TICKET];

NSMutableString *cookieString = [[NSMutableString alloc]init];

[cookieString appendFormat:@"ESHOP_H5_T=%@;",ticket];

[mutableRequest setValue:cookieString forHTTPHeaderField:@"Cookie"];

NSLog(@"ticket? ==? %@", ticket);

request = [mutableRequest copy];

[webView loadRequest:request];

return NO;

}else{

return YES:

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容