NSHTTPCookieStorage:保存cookie的单利
包含了cookie的基本操作,常用的方法有
设置cookie
- (void)setCookie:(NSHTTPCookie *)cookie;
删除cookie
- (void)deleteCookie:(NSHTTPCookie *)cookie;
写入Cookie
NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject:@".tairanmall.com" forKey:NSHTTPCookieDomain]; [dict setObject:@"/" forKey:NSHTTPCookiePath]; [dict setObject:@"token" forKey:NSHTTPCookieName]; [dict setObject:@"123" forKey:NSHTTPCookieValue]; // 过期时间为1个月 [dict setValue:[NSDate dateWithTimeIntervalSinceNow:2592000] forKey:NSHTTPCookieExpires]; [dict setObject:@"0" forKey:NSHTTPCookieVersion]; NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:dict];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
```
Cookie的读取NSHTTPCookieStorage *cookieStore = [NSHTTPCookieStorage sharedHTTPCookieStorage]; for (NSHTTPCookie *cookie in [cookieStore cookies]) { // 获取指定key的cookie if ([cookie.name isEqualToString:name]) { } }

在webView中设置cookie

UIWebView(早起的webview框架)
UIWebView设置Cookie与在http请求中添加的Cookie共用一套NSHTTPCookieStorage,所以保证设置一次即可
WKWebView
WKWebView相对于UIWebView,有以下优点
内存占用是UIWebView的1/4~1/3页面加载速度有提升,有的文章说它的加载速度比UIWebView提升了一倍左右更为细致地拆分了 UIWebViewDelegate 中的方法自带进度条。不需要像UIWebView一样自己做假进度条(通过NJKWebViewProgress和双层代理技术实现),技术复杂度和代码量,根贴近实际加载进度优化好的多允许JavaScript的Nitro库加载并使用(UIWebView中限制)可以和js直接互调函数,不像UIWebView需要第三方库WebViewJavascriptBridge来协助处理和js的交互。
缺点
Cookie管理很麻烦,不能支持缓存页面Cookie同样是由于进程间通信性能问题,HTTPBody字段被丢弃
[request setHTTPMethod:@"POST"];[request setHTTPBody:[@"bodyData"dataUsingEncoding:NSUTF8StringEncoding]];[wkwebview loadRequest: request];

cookie设置注意项

必须设置过期时间:否则很容易会设置cookie后立马就会超时cookie自动丢失的问题:cookie存储在NSHTTPCookieStorage中,NSHTTPCookieStorage会持久化在本地,理论上只要app启动,就可以读取到设置过的cookie,但是偶发性的cookie被丢失,丢失原因不明,有相关资料显示cookie在客户端中五分钟又可能存在丢失的情况,这种情况比较偶发,cookie内存最大为4k,不要使用过长的cookie的值,设置过多的cookie