這篇文章主要講解了“Cookie有什么作用”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Cookie有什么作用”吧!
創(chuàng)新互聯(lián)從2013年成立,先為羅江等服務(wù)建站,羅江等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為羅江企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
1
Cookie是什么
Cookie
Cookie,有時也用其復(fù)數(shù)形式Cookies,指某些網(wǎng)站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)。
插曲Session
Session
由于HTTP協(xié)議是無狀態(tài)的協(xié)議,所以當服務(wù)端需要記錄用戶狀態(tài)時,就需要用某種機制來識別具體的用戶,這個機制就是Session。
2
Cookie有什么用
筆者以簡書顯示內(nèi)容為繁體還是簡體為例,來介紹Cookie的用處:
(1)當我們使用瀏覽器訪問jianshu.com時,簡書服務(wù)端不知道瀏覽器的信息,默認情況下,瀏覽器顯示內(nèi)容為“簡體”;
(2)當我們設(shè)置瀏覽器顯示內(nèi)容為“繁體”時,瀏覽器將顯示繁體內(nèi)容;
(3)當我們關(guān)閉瀏覽器,再重新打開瀏覽器,發(fā)現(xiàn)簡書的顯示內(nèi)容仍然會是繁體;筆者認為原因是簡書服務(wù)端可能給瀏覽器做了一個唯一標識的記錄,放置到自己的Session中,當瀏覽器重啟后,再去服務(wù)端請求簡書內(nèi)容,發(fā)現(xiàn)當前瀏覽器需要顯示為繁體,便下發(fā)了繁體顯示內(nèi)容;
(4)如果沒有使用Cookie,因為HTTP協(xié)議是無狀態(tài)的,那么我們設(shè)置的顯示內(nèi)容為繁體或者簡體后,當我們打開新的頁面或關(guān)閉瀏覽器重新打開的時候,之前設(shè)置的顯示繁體或者簡體便不存在了。
3
Cookie的類型
籠統(tǒng)地說,Cookie分為2類:會話Cookie和 持久Cookie
會話Cookie是一種臨時Cookie,它記錄用戶訪問長點是的設(shè)置和偏好。用戶退出瀏覽器時,會話Cookie就被刪除了。
持久Cookie的生存時間更長一些,他們存儲在硬盤上,瀏覽器退出,計算機重啟時,他們?nèi)匀淮嬖凇MǔS贸志肅ookie維護某個用戶會周期性訪問的站點的配置文件或登錄名。
會話Cookie和持久Cookie之間的唯一區(qū)別就是他們的過期時間。沒有指定Expires(過期時間)時,默認為會話Cookie。
以簡書為例:看下簡書的會話Cookie和持久Cookie:
上圖表明:jianshu.com的cookies
持久Cookie:
expires 過期時間為2018年4月9日星期二 Tue,09 Apr 2019 13:31:57 -0000
筆者猜測這個值表示的意思是當前的某個時間減去0000,以達到作為持久Cookie的目的
domain 為.jianshu.com
Path 為 /
Secure為YES
Http only 為true;
會話Cookie:
local:zh-CN 顯示為簡體;
包括會話Cookie,筆者以為關(guān)閉瀏覽器后會話Cookie就會消失,不過筆者的如下測試結(jié)果,不確定算不算是會話Cookie消失的一種體現(xiàn)。首次啟動瀏覽器顯示的會話Cookie為:
local:zh-CN;
path:/;
default_font:font1;
設(shè)置過繁體的情況:
local:zh-TW;
path:/;
default_font:font1;
然后刷新jianshu.com,顯示內(nèi)容,就只會顯示
local:zh-CN
或是
local:zh-TW
不確定這個算不算是會話Cookie在關(guān)閉瀏覽器后,就消失了。讀者也可以自己測試一下。有做服務(wù)端的同學知道的話,敬請告知。
4
Cookie的工作流程
筆者仍以瀏覽器打開簡書顯示內(nèi)容字體為“簡體”或是“繁體”為例闡述Cookie的工作流程。
(1)當我們使用瀏覽器首次訪問jianshu.com時,簡書服務(wù)端不知道瀏覽器的信息,默認情況下,瀏覽器顯示內(nèi)容為“簡體”。服務(wù)端對瀏覽器創(chuàng)建一個Session;
(2)當我們設(shè)置瀏覽器顯示內(nèi)容為“繁體”時,會通過Cookie的方式設(shè)置local為zh-TW,給服務(wù)端發(fā)送請求,并且得到的響應(yīng)會是設(shè)置瀏覽器的顯示內(nèi)容為“繁體”,服務(wù)端同事會更新Session中的信息為zh-TW(繁體);
(3)當我們關(guān)閉瀏覽器,會話消失的情況下,然后我們再重新打開瀏覽器,發(fā)現(xiàn)簡書的顯示內(nèi)容仍然會是繁體,筆者認為這個是因為簡書服務(wù)端Session存儲著瀏覽器應(yīng)該顯示字體,(比如服務(wù)端存儲著瀏覽器的某個唯一的id,然后當重新打開瀏覽器,對服務(wù)端做請求時,服務(wù)端根據(jù)之前的Session下發(fā)繁體內(nèi)容)。
5
Cookie的屬性
Domain(域):Cookie的域;瀏覽器只向指定域中的服務(wù)器主機名發(fā)送Cookie,這樣服務(wù)器就將Cookie限制在了特定的域中。jianshu.com域就與jianshu1.jianshu.com和jianshu1.jianshu2.jianshu.com相匹配,但與js.com就不匹配了。
Path(路徑):通過這個屬性可以為服務(wù)器上特定的文檔分配Cookie,如果Path屬性是一個URL路徑前綴,就可以附加一個Cookie,路徑/foo,與/foobar和foo/bar.html相匹配,路徑"/"與域名中所有的內(nèi)容都匹配。
Secure(安全):是否只有在HTTP使用SSL連接時才發(fā)送這個Cookie;
expires(過期):從格林尼治標準時間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的過期時間;
NSHTTPCookieDiscard sessionOnly:一個布爾值,表示cookie是否應(yīng)該在會話結(jié)束的時候被丟棄(不管過期日期);
HTTPOnly:指定客戶端不要與JavaScript應(yīng)用共享Cookie,以防止跨站腳本攻擊;
NSHTTPCookieSecure secure:指定Cookie只會用在HTTPS連接而非HTTP連接;
properties:Cookie的屬性;
NSHTTPCookiePropertyKey:定義cookie屬性字典中支持的常量;
NSHTTPCookieComment comment:Cookie的說明文字
NSHTTPCookieCommentURL commentURL:cookie的說明URL;
NSHTTPCookieAcceptPolicy:Cookie的訪問權(quán)限,NSHTTPCookie由NSHTTPCookieStorage管理。
NSHTTPCookieAcceptPolicyAlways:存儲所有的cookie;
NSHTTPCookieAcceptPolicyNever:不會存儲cookie;
NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain:只保存域值和請求域相匹配的Cookie;
7
iOS 網(wǎng)絡(luò)請求使用Cookie
客戶端的請求頭里邊的cookie的header,key為"cookie"
服務(wù)端響應(yīng)客戶端的時候,響應(yīng)頭中的cookie的header,key為"set-cookie"
網(wǎng)絡(luò)請求使用AFN攜帶Cookie 測試AFN網(wǎng)絡(luò)請求攜帶Cookie,筆者使用的是訪問juejin.im的時候攜帶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) { }];
當需要設(shè)置多個cookie值的時候,使用cookieKey1=cookieValue1 ;cookieKey2=cookieValue2;的方式,使用分號分隔開每一對cookieKey及Value。
網(wǎng)絡(luò)請求使用NSURLSession攜帶Cookie
測試NSURLSession網(wǎng)絡(luò)請求攜帶Cookie,筆者使用的是訪問jianshu.com的時候攜帶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)過本文的學習后,相信大家對Cookie有什么作用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
網(wǎng)頁題目:Cookie有什么作用
文章源于:http://vcdvsql.cn/article18/pehcdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站改版、自適應(yīng)網(wǎng)站、定制開發(fā)、小程序開發(fā)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)