- 資訊首頁(yè) > 網(wǎng)絡(luò )安全 >
- Cookie有什么作用
這篇文章主要講解了“Cookie有什么作用”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“Cookie有什么作用”吧!
1
Cookie是什么
Cookie
Cookie,有時(shí)也用其復數形式Cookies,指某些網(wǎng)站為了辨別用戶(hù)身份、進(jìn)行session跟蹤而儲存在用戶(hù)本地終端上的數據(通常經(jīng)過(guò)加密)。
插曲Session
Session
由于HTTP協(xié)議是無(wú)狀態(tài)的協(xié)議,所以當服務(wù)端需要記錄用戶(hù)狀態(tài)時(shí),就需要用某種機制來(lái)識別具體的用戶(hù),這個(gè)機制就是Session。
2
Cookie有什么用
筆者以簡(jiǎn)書(shū)顯示內容為繁體還是簡(jiǎn)體為例,來(lái)介紹Cookie的用處:
(1)當我們使用瀏覽器訪(fǎng)問(wèn)jianshu.com時(shí),簡(jiǎn)書(shū)服務(wù)端不知道瀏覽器的信息,默認情況下,瀏覽器顯示內容為“簡(jiǎn)體”;
(2)當我們設置瀏覽器顯示內容為“繁體”時(shí),瀏覽器將顯示繁體內容;
(3)當我們關(guān)閉瀏覽器,再重新打開(kāi)瀏覽器,發(fā)現簡(jiǎn)書(shū)的顯示內容仍然會(huì )是繁體;筆者認為原因是簡(jiǎn)書(shū)服務(wù)端可能給瀏覽器做了一個(gè)唯一標識的記錄,放置到自己的Session中,當瀏覽器重啟后,再去服務(wù)端請求簡(jiǎn)書(shū)內容,發(fā)現當前瀏覽器需要顯示為繁體,便下發(fā)了繁體顯示內容;
(4)如果沒(méi)有使用Cookie,因為HTTP協(xié)議是無(wú)狀態(tài)的,那么我們設置的顯示內容為繁體或者簡(jiǎn)體后,當我們打開(kāi)新的頁(yè)面或關(guān)閉瀏覽器重新打開(kāi)的時(shí)候,之前設置的顯示繁體或者簡(jiǎn)體便不存在了。
3
Cookie的類(lèi)型
籠統地說(shuō),Cookie分為2類(lèi):會(huì )話(huà)Cookie和 持久Cookie
會(huì )話(huà)Cookie是一種臨時(shí)Cookie,它記錄用戶(hù)訪(fǎng)問(wèn)長(cháng)點(diǎn)是的設置和偏好。用戶(hù)退出瀏覽器時(shí),會(huì )話(huà)Cookie就被刪除了。
持久Cookie的生存時(shí)間更長(cháng)一些,他們存儲在硬盤(pán)上,瀏覽器退出,計算機重啟時(shí),他們仍然存在。通常用持久Cookie維護某個(gè)用戶(hù)會(huì )周期性訪(fǎng)問(wèn)的站點(diǎn)的配置文件或登錄名。
會(huì )話(huà)Cookie和持久Cookie之間的唯一區別就是他們的過(guò)期時(shí)間。沒(méi)有指定Expires(過(guò)期時(shí)間)時(shí),默認為會(huì )話(huà)Cookie。
以簡(jiǎn)書(shū)為例:看下簡(jiǎn)書(shū)的會(huì )話(huà)Cookie和持久Cookie:
上圖表明:jianshu.com的cookies
持久Cookie:
expires 過(guò)期時(shí)間為2018年4月9日星期二 Tue,09 Apr 2019 13:31:57 -0000
筆者猜測這個(gè)值表示的意思是當前的某個(gè)時(shí)間減去0000,以達到作為持久Cookie的目的
domain 為.jianshu.com
Path 為 /
Secure為YES
Http only 為true;
會(huì )話(huà)Cookie:
local:zh-CN 顯示為簡(jiǎn)體;
包括會(huì )話(huà)Cookie,筆者以為關(guān)閉瀏覽器后會(huì )話(huà)Cookie就會(huì )消失,不過(guò)筆者的如下測試結果,不確定算不算是會(huì )話(huà)Cookie消失的一種體現。首次啟動(dòng)瀏覽器顯示的會(huì )話(huà)Cookie為:
local:zh-CN;
path:/;
default_font:font1;
設置過(guò)繁體的情況:
local:zh-TW;
path:/;
default_font:font1;
然后刷新jianshu.com,顯示內容,就只會(huì )顯示
local:zh-CN
或是
local:zh-TW
不確定這個(gè)算不算是會(huì )話(huà)Cookie在關(guān)閉瀏覽器后,就消失了。讀者也可以自己測試一下。有做服務(wù)端的同學(xué)知道的話(huà),敬請告知。
4
Cookie的工作流程
筆者仍以瀏覽器打開(kāi)簡(jiǎn)書(shū)顯示內容字體為“簡(jiǎn)體”或是“繁體”為例闡述Cookie的工作流程。
(1)當我們使用瀏覽器首次訪(fǎng)問(wèn)jianshu.com時(shí),簡(jiǎn)書(shū)服務(wù)端不知道瀏覽器的信息,默認情況下,瀏覽器顯示內容為“簡(jiǎn)體”。服務(wù)端對瀏覽器創(chuàng )建一個(gè)Session;
(2)當我們設置瀏覽器顯示內容為“繁體”時(shí),會(huì )通過(guò)Cookie的方式設置local為zh-TW,給服務(wù)端發(fā)送請求,并且得到的響應會(huì )是設置瀏覽器的顯示內容為“繁體”,服務(wù)端同事會(huì )更新Session中的信息為zh-TW(繁體);
(3)當我們關(guān)閉瀏覽器,會(huì )話(huà)消失的情況下,然后我們再重新打開(kāi)瀏覽器,發(fā)現簡(jiǎn)書(shū)的顯示內容仍然會(huì )是繁體,筆者認為這個(gè)是因為簡(jiǎn)書(shū)服務(wù)端Session存儲著(zhù)瀏覽器應該顯示字體,(比如服務(wù)端存儲著(zhù)瀏覽器的某個(gè)唯一的id,然后當重新打開(kāi)瀏覽器,對服務(wù)端做請求時(shí),服務(wù)端根據之前的Session下發(fā)繁體內容)。
5
Cookie的屬性
Domain(域):Cookie的域;瀏覽器只向指定域中的主機名發(fā)送Cookie,這樣服務(wù)器就將Cookie限制在了特定的域中。jianshu.com域就與jianshu1.jianshu.com和jianshu1.jianshu2.jianshu.com相匹配,但與js.com就不匹配了。
Path(路徑):通過(guò)這個(gè)屬性可以為服務(wù)器上特定的文檔分配Cookie,如果Path屬性是一個(gè)URL路徑前綴,就可以附加一個(gè)Cookie,路徑/foo,與/foobar和foo/bar.html相匹配,路徑"/"與域名中所有的內容都匹配。
Secure(安全):是否只有在HTTP使用SSL連接時(shí)才發(fā)送這個(gè)Cookie;
expires(過(guò)期):從格林尼治標準時(shí)間1970年1月1日00:00:00開(kāi)始的過(guò)期秒數;
name(名字):Cookie變量的名字;
value(值):Cookie變量的值;
6
iOS中NSHTTPCookie
常用屬性:
NSHTTPCookieDomain domain:cookie的域;
NSHTTPCookiePath path:Cookie的path;
NSHTTPCookiePort portList:Cookie的端口列表;
NSHTTPCookieName name:Cookie的名字;
NSHTTPCookieValue value:Cookie的值;
NSHTTPCookieVersion version: Cookie的版本;
NSHTTPCookieExpires expireDate:Cookie的過(guò)期時(shí)間;
NSHTTPCookieDiscard sessionOnly:一個(gè)布爾值,表示cookie是否應該在會(huì )話(huà)結束的時(shí)候被丟棄(不管過(guò)期日期);
HTTPOnly:指定客戶(hù)端不要與JavaScript應用共享Cookie,以防止跨站腳本攻擊;
NSHTTPCookieSecure secure:指定Cookie只會(huì )用在HTTPS連接而非HTTP連接;
properties:Cookie的屬性;
NSHTTPCookiePropertyKey:定義cookie屬性字典中支持的常量;
NSHTTPCookieComment comment:Cookie的說(shuō)明文字
NSHTTPCookieCommentURL commentURL:cookie的說(shuō)明URL;
NSHTTPCookieAcceptPolicy:Cookie的訪(fǎng)問(wèn)權限,NSHTTPCookie由NSHTTPCookieStorage管理。
NSHTTPCookieAcceptPolicyAlways:存儲所有的cookie;
NSHTTPCookieAcceptPolicyNever:不會(huì )存儲cookie;
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:只保存域值和請求域相匹配的Cookie;
7
iOS 網(wǎng)絡(luò )請求使用Cookie
客戶(hù)端的請求頭里邊的cookie的header,key為"cookie"
服務(wù)端響應客戶(hù)端的時(shí)候,響應頭中的cookie的header,key為"set-cookie"
網(wǎng)絡(luò )請求使用AFN攜帶Cookie 測試AFN網(wǎng)絡(luò )請求攜帶Cookie,筆者使用的是訪(fǎng)問(wèn)juejin.im的時(shí)候攜帶Cookie,效果如下圖:
相關(guān)代碼如下:
NSString *urlString = @"https://juejin.im"; AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager]; sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; [sessionManager.requestSerializer setValue:@"QiShareNameAFN=QiShareValueAFN;QiShareTokenAFN=QiShareTokenValueAFN" forHTTPHeaderField:@"cookie"]; [sessionManager GET:urlString parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }];
當需要設置多個(gè)cookie值的時(shí)候,使用cookieKey1=cookieValue1 ;cookieKey2=cookieValue2;的方式,使用分號分隔開(kāi)每一對cookieKey及Value。
網(wǎng)絡(luò )請求使用NSURLSession攜帶Cookie
測試NSURLSession網(wǎng)絡(luò )請求攜帶Cookie,筆者使用的是訪(fǎng)問(wèn)jianshu.com的時(shí)候攜帶Cookie,效果如下圖:
相關(guān)代碼如下:
NSURL *url = [NSURL URLWithString:@"https://www.jianshu.com"]; NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url]; mRequest.HTTPMethod = @"GET”; [mRequest setValue:@"QiShareName=QiShareValue;QiShareToken=QiShareTokenValue" forHTTPHeaderField:@"cookie"]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:mRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { }]; [dataTask resume];
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站