溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Cookie有什么作用

發(fā)布時(shí)間:2021-09-09 10:24:26 來源:億速云 閱讀:290 作者:chen 欄目:安全技術(shù)

這篇文章主要講解了“Cookie有什么作用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Cookie有什么作用”吧!


1

Cookie是什么

  • Cookie

Cookie,有時(shí)也用其復(fù)數(shù)形式Cookies,指某些網(wǎng)站為了辨別用戶身份、進(jìn)行session跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)。

插曲Session

  • Session

由于HTTP協(xié)議是無狀態(tài)的協(xié)議,所以當(dāng)服務(wù)端需要記錄用戶狀態(tài)時(shí),就需要用某種機(jī)制來識(shí)別具體的用戶,這個(gè)機(jī)制就是Session。

2

Cookie有什么用

筆者以簡書顯示內(nèi)容為繁體還是簡體為例,來介紹Cookie的用處:


(1)當(dāng)我們使用瀏覽器訪問jianshu.com時(shí),簡書服務(wù)端不知道瀏覽器的信息,默認(rèn)情況下,瀏覽器顯示內(nèi)容為“簡體”;


(2)當(dāng)我們設(shè)置瀏覽器顯示內(nèi)容為“繁體”時(shí),瀏覽器將顯示繁體內(nèi)容;


(3)當(dāng)我們關(guān)閉瀏覽器,再重新打開瀏覽器,發(fā)現(xiàn)簡書的顯示內(nèi)容仍然會(huì)是繁體;筆者認(rèn)為原因是簡書服務(wù)端可能給瀏覽器做了一個(gè)唯一標(biāo)識(shí)的記錄,放置到自己的Session中,當(dāng)瀏覽器重啟后,再去服務(wù)端請求簡書內(nèi)容,發(fā)現(xiàn)當(dāng)前瀏覽器需要顯示為繁體,便下發(fā)了繁體顯示內(nèi)容;


(4)如果沒有使用Cookie,因?yàn)镠TTP協(xié)議是無狀態(tài)的,那么我們設(shè)置的顯示內(nèi)容為繁體或者簡體后,當(dāng)我們打開新的頁面或關(guān)閉瀏覽器重新打開的時(shí)候,之前設(shè)置的顯示繁體或者簡體便不存在了。


3

Cookie的類型

籠統(tǒng)地說,Cookie分為2類:會(huì)話Cookie和 持久Cookie

會(huì)話Cookie是一種臨時(shí)Cookie,它記錄用戶訪問長點(diǎn)是的設(shè)置和偏好。用戶退出瀏覽器時(shí),會(huì)話Cookie就被刪除了。

持久Cookie的生存時(shí)間更長一些,他們存儲(chǔ)在硬盤上,瀏覽器退出,計(jì)算機(jī)重啟時(shí),他們?nèi)匀淮嬖?。通常用持久Cookie維護(hù)某個(gè)用戶會(huì)周期性訪問的站點(diǎn)的配置文件或登錄名。

會(huì)話Cookie和持久Cookie之間的唯一區(qū)別就是他們的過期時(shí)間。沒有指定Expires(過期時(shí)間)時(shí),默認(rèn)為會(huì)話Cookie。

以簡書為例:看下簡書的會(huì)話Cookie和持久Cookie:

Cookie有什么作用

上圖表明:jianshu.com的cookies

持久Cookie:

  • expires 過期時(shí)間為2018年4月9日星期二 Tue,09 Apr 2019 13:31:57 -0000

  • 筆者猜測這個(gè)值表示的意思是當(dāng)前的某個(gè)時(shí)間減去0000,以達(dá)到作為持久Cookie的目的

  • domain 為.jianshu.com

  • Path 為 /

  • Secure為YES

  • Http only 為true;

會(huì)話Cookie:

  • local:zh-CN 顯示為簡體;

包括會(huì)話Cookie,筆者以為關(guān)閉瀏覽器后會(huì)話Cookie就會(huì)消失,不過筆者的如下測試結(jié)果,不確定算不算是會(huì)話Cookie消失的一種體現(xiàn)。首次啟動(dòng)瀏覽器顯示的會(huì)話Cookie為:

local:zh-CN;

path:/;

default_font:font1;

設(shè)置過繁體的情況:

local:zh-TW;

path:/;

default_font:font1;

然后刷新jianshu.com,顯示內(nèi)容,就只會(huì)顯示

local:zh-CN

或是

local:zh-TW

不確定這個(gè)算不算是會(huì)話Cookie在關(guān)閉瀏覽器后,就消失了。讀者也可以自己測試一下。有做服務(wù)端的同學(xué)知道的話,敬請告知。

4

Cookie的工作流程

筆者仍以瀏覽器打開簡書顯示內(nèi)容字體為“簡體”或是“繁體”為例闡述Cookie的工作流程。

(1)當(dāng)我們使用瀏覽器首次訪問jianshu.com時(shí),簡書服務(wù)端不知道瀏覽器的信息,默認(rèn)情況下,瀏覽器顯示內(nèi)容為“簡體”。服務(wù)端對瀏覽器創(chuàng)建一個(gè)Session;

(2)當(dāng)我們設(shè)置瀏覽器顯示內(nèi)容為“繁體”時(shí),會(huì)通過Cookie的方式設(shè)置local為zh-TW,給服務(wù)端發(fā)送請求,并且得到的響應(yīng)會(huì)是設(shè)置瀏覽器的顯示內(nèi)容為“繁體”,服務(wù)端同事會(huì)更新Session中的信息為zh-TW(繁體);

(3)當(dāng)我們關(guān)閉瀏覽器,會(huì)話消失的情況下,然后我們再重新打開瀏覽器,發(fā)現(xiàn)簡書的顯示內(nèi)容仍然會(huì)是繁體,筆者認(rèn)為這個(gè)是因?yàn)楹啎?wù)端Session存儲(chǔ)著瀏覽器應(yīng)該顯示字體,(比如服務(wù)端存儲(chǔ)著瀏覽器的某個(gè)唯一的id,然后當(dāng)重新打開瀏覽器,對服務(wù)端做請求時(shí),服務(wù)端根據(jù)之前的Session下發(fā)繁體內(nèi)容)。

5

Cookie的屬性

  • Domain(域):Cookie的域;瀏覽器只向指定域中的服務(wù)器主機(jī)名發(fā)送Cookie,這樣服務(wù)器就將Cookie限制在了特定的域中。jianshu.com域就與jianshu1.jianshu.com和jianshu1.jianshu2.jianshu.com相匹配,但與js.com就不匹配了。

  • Path(路徑):通過這個(gè)屬性可以為服務(wù)器上特定的文檔分配Cookie,如果Path屬性是一個(gè)URL路徑前綴,就可以附加一個(gè)Cookie,路徑/foo,與/foobar和foo/bar.html相匹配,路徑"/"與域名中所有的內(nèi)容都匹配。

  • Secure(安全):是否只有在HTTP使用SSL連接時(shí)才發(fā)送這個(gè)Cookie;

  • expires(過期):從格林尼治標(biāo)準(zhǔn)時(shí)間1970年1月1日00:00:00開始的過期秒數(shù);

  • 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的過期時(shí)間;

  • NSHTTPCookieDiscard sessionOnly:一個(gè)布爾值,表示cookie是否應(yīng)該在會(huì)話結(jié)束的時(shí)候被丟棄(不管過期日期);

  • HTTPOnly:指定客戶端不要與JavaScript應(yīng)用共享Cookie,以防止跨站腳本攻擊;

  • NSHTTPCookieSecure secure:指定Cookie只會(huì)用在HTTPS連接而非HTTP連接;

  • properties:Cookie的屬性;

  • NSHTTPCookiePropertyKey:定義cookie屬性字典中支持的常量;

  • NSHTTPCookieComment comment:Cookie的說明文字

  • NSHTTPCookieCommentURL commentURL:cookie的說明URL;

  • NSHTTPCookieAcceptPolicy:Cookie的訪問權(quán)限,NSHTTPCookie由NSHTTPCookieStorage管理。

  • NSHTTPCookieAcceptPolicyAlways:存儲(chǔ)所有的cookie;

    NSHTTPCookieAcceptPolicyNever:不會(huì)存儲(chǔ)cookie;

    NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:只保存域值和請求域相匹配的Cookie;


7

iOS 網(wǎng)絡(luò)請求使用Cookie

客戶端的請求頭里邊的cookie的header,key為"cookie"

服務(wù)端響應(yīng)客戶端的時(shí)候,響應(yīng)頭中的cookie的header,key為"set-cookie"

網(wǎng)絡(luò)請求使用AFN攜帶Cookie 測試AFN網(wǎng)絡(luò)請求攜帶Cookie,筆者使用的是訪問juejin.im的時(shí)候攜帶Cookie,效果如下圖:

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) {    }];

當(dāng)需要設(shè)置多個(gè)cookie值的時(shí)候,使用cookieKey1=cookieValue1 ;cookieKey2=cookieValue2;的方式,使用分號(hào)分隔開每一對cookieKey及Value。

  • 網(wǎng)絡(luò)請求使用NSURLSession攜帶Cookie

測試NSURLSession網(wǎng)絡(luò)請求攜帶Cookie,筆者使用的是訪問jianshu.com的時(shí)候攜帶Cookie,效果如下圖:

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];

感謝各位的閱讀,以上就是“Cookie有什么作用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Cookie有什么作用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI