Cookie
什么是Cookie
現(xiàn)在很多的網(wǎng)站我們登錄一次之后下次就不需要我們再次登錄。這種操作很常見查排,可是網(wǎng)頁與程序的邏輯是完全的不同,也就是說網(wǎng)頁并不像程序那樣擁有自己的存儲路徑芽腾,那它是如何做到的呢歉提?
Web端基本都是使用HTTP/HTTPS協(xié)議傳輸數(shù)據(jù)的。這種協(xié)議是無狀態(tài)的協(xié)議狠持。也就是說一旦數(shù)據(jù)交換完畢疟位,客戶端與服務器端的連接就會關閉,再次交換數(shù)據(jù)需要建立新的連接喘垂。這就意味著服務器無法從連接上跟蹤上次的狀態(tài)甜刻。
所以為了解決以上問題绍撞,W3C組織提出了Cookie(甜餅)。
由于HTTP是一種無狀態(tài)的協(xié)議得院,服務器單從網(wǎng)絡連接上是無法知道客戶身份傻铣。那如何解決呢?就給客戶端們頒發(fā)一個通行證吧祥绞,每人一個矾柜,無論誰訪問都必須攜帶自己通行證。這樣服務器就能從通行證上確認客戶身份了就谜。這就是Cookie的工作原理
Cookie本質(zhì)上是一小段的文本信息怪蔑,當客戶端請求服務器的時候,如果服務器需要記錄客戶端狀態(tài)丧荐,就會向客戶端頒發(fā)一個Cookie缆瓣。客戶端會把Cookie保存起來虹统,當客戶端再次請求的時候弓坞,把網(wǎng)址以及保存下來的Cookie一同提交服務器,這樣服務器就可以辨認用戶的狀態(tài)车荔。
iOS中網(wǎng)絡請求使用Cookie
iOS中的網(wǎng)絡請求對于Cookie的支持是非常強大的渡冻,當你訪問一個網(wǎng)站的時候,NSURLRequest都會幫你記錄訪問站點的Cookie忧便,而且當你下次訪問這個網(wǎng)站的時候族吻,NSURLRequest會帶著上次保存下來的Cookie繼續(xù)請求。
下面來看看如何查看訪問網(wǎng)站的Cookie
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
}];
[task resume];
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [cookieJar cookies]) {
NSLog(@"%@", cookie);
}
這樣我們就可以看到了打印出來的Cookie
那么如何清空Cookie呢珠增?
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookieArray = [NSArray arrayWithArray:[cookieJar cookies]];
for (NSHTTPCookie *cookie in cookieArray) {
[cookieJar deleteCookie:cookie];
}
如何指定Cookie呢超歌?
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
// 很據(jù)具體的Cookie設置
// 以下為網(wǎng)絡拿到的測試數(shù)據(jù)
[cookieProperties setObject:@"username" forKey:NSHTTPCookieName];
[cookieProperties setObject:@"rainbird" forKey:NSHTTPCookieValue];
[cookieProperties setObject:@"cnrainbird.com" forKey:NSHTTPCookieDomain];
[cookieProperties setObject:@"cnrainbird.com" forKey:NSHTTPCookieOriginURL];
[cookieProperties setObject:@"/" forKey:NSHTTPCookiePath];
[cookieProperties setObject:@"0" forKey:NSHTTPCookieVersion];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
這就完成了Cookie的設置,一切都是那么的簡單蒂教。