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:
}