詳解 Cookie 紀(jì)要《轉(zhuǎn)》

作者:晚晴幽草軒
www.jeffjade.com/2016/10/31/115-summary-of-cookie/

背景

在HTTP協(xié)議的定義中,采用了一種機制來記錄客戶端和服務(wù)器端交互的信息,這種機制被稱為cookie览徒,cookie規(guī)范定義了服務(wù)器和客戶端交互信息的格式、生存期、使用范圍、安全性垄潮。

在JavaScript中可以通過 document.cookie 來讀取或設(shè)置這些信息。由于 cookie 多用在客戶端和服務(wù)端之間進行通信闷盔,所以除了JavaScript以外弯洗,服務(wù)端的語言(如PHP)也可以存取 cookie。

Cookie詳解

Cookie在遠程瀏覽器端存儲數(shù)據(jù)并以此跟蹤和識別用戶的機制逢勾。從實現(xiàn)上說牡整,Cookie是存儲在客戶端上的一小段數(shù)據(jù),瀏覽器(即客戶端)通過HTTP協(xié)議和服務(wù)器端進行Cookie交互溺拱。

Cooke獨立于語言存在逃贝,嚴(yán)格地說,Cookie并不是由PHP迫摔、Java等語言實現(xiàn)的沐扳,而是由這些語言對Cookie進行間接操作,即發(fā)送HTTP指令句占,瀏覽器收到指令便操作Cookie并返回給服務(wù)器沪摄。因此,Cookie是由瀏覽器實現(xiàn)和管理的纱烘。舉例說杨拐,PHP并沒有真正設(shè)置過Cookie,只是發(fā)出指令讓瀏覽器來做這件事擂啥。PHP中可以使用setcookie() 或 setrawcookie() 函數(shù)設(shè)置Cookie哄陶。setcookie()最后一個參數(shù)HttpOnly設(shè)置了后,JavaScript就無法讀取到這個Cookie哺壶。

設(shè)置Cookie時需注意:①函數(shù)有返回值屋吨,false失敗舱痘,true成功,成功僅供參考离赫,不代表客戶端一定能接收到;②PHP設(shè)置的Cookie不能立即生效塌碌,要等下一個頁面才能看到(Cookie從服務(wù)器傳給瀏覽器渊胸,下個頁面瀏覽器才能把設(shè)置的Cookie傳回給服務(wù)器);如果是JavaScript設(shè)置的台妆,是立即生效的翎猛;③Cookie沒有顯示的刪除函數(shù),可以設(shè)置expire過期時間接剩,自動觸發(fā)瀏覽器的刪除機制切厘。

Cookie是HTTP頭的一部分,即現(xiàn)發(fā)送或請求Cookie懊缺,才是data域疫稿;setcookie()等函數(shù)必須在數(shù)據(jù)之前調(diào)用,這和header() 函數(shù)是相同的鹃两。不過也可以使用輸出緩沖函數(shù)延遲腳本的輸出遗座,知道設(shè)置好所有Cookie和其他HTTP標(biāo)頭。

Cookie通常用來存儲一些不是很敏感的信息俊扳,或者進行登錄控制途蒋,也可用來記住用戶名、記住免密碼登錄馋记、防止刷票等号坡。每個域名下允許的Cookie是有限制的,根據(jù)瀏覽器這個限制也不同梯醒。Cookie不是越多越好宽堆,它會增加寬帶,增加流量消耗冤馏,所以不要濫用Cookie日麸;不要把Cookie當(dāng)作客戶端的存儲器來用。一個域名的每個Cookie限制以4千字節(jié)(KB)鍵值對的形式存儲逮光。

還有一種Cookie是Flash創(chuàng)建的代箭,成為Flash Shard Object,又稱Flash Cookie涕刚,即使清空瀏覽器所有隱私數(shù)據(jù)嗡综,這類頑固的Cookie還會存在硬盤上,因為它只受Flash管理杜漠,很多網(wǎng)站采用這種技術(shù)識別用戶极景。

Cookie跨域察净,主要是為了統(tǒng)一應(yīng)用平臺,實現(xiàn)單點登錄盼樟;需使用P3P協(xié)議(Platform for Privacy Preferences)氢卡,通過P3P使用戶自己可以指定瀏覽器的隱私策略,達到存儲第三方Cookie的目的晨缴,只需要在響應(yīng)用戶請求時译秦,在HTTP的頭信息中增加關(guān)于P3P的配置信息就可以了。Cookie跨域涉及兩個不同的應(yīng)用击碗,習(xí)慣上稱為第一方和第三方筑悴。第三方通常是來自別人的廣告、或Iframe別的網(wǎng)站的URL稍途,這些第三方網(wǎng)站可能使用的Cookie阁吝。

Cookie格式

Cookie中保存的信息都是文本信息,在客戶端和服務(wù)器端交互過程中械拍,cookie信息被附加在HTTP消息頭中傳遞突勇,cookie的信息由鍵/值對組成。下面是一個HTTP頭中cookie的例子:

Set-Cookie: key = value; Path=/

Cookie中存放的信息包含cookie本身屬性和用戶自定義屬性坷虑,一個cookie只能包含一個自定義鍵/值對与境。Cookie本身屬性有”Comment” 、”Domain”猖吴、”Max-Age”摔刁、”Path”、”Secure”海蔽、”Version”共屈。

Comment 屬性是cookie的產(chǎn)生著對該cookie的描述;

Domain 屬性定義可訪問該cookie的域名党窜,對一些大的網(wǎng)站拗引,如果希望cookie可以在子網(wǎng)站中共享,可以使用該屬性幌衣。例如設(shè)置Domain為 .bigsite.com ,則sub1.bigsite.com和sub2.bigsite.com都可以訪問已保存在客戶端的cookie矾削,這時還需要將Path設(shè)置為/。

Max-Age 屬性定義cookie的有效時間豁护,用秒計數(shù)哼凯,當(dāng)超過有效期后,cookie的信息不會從客戶端附加在HTTP消息頭中發(fā)送到服務(wù)端楚里。

Path 屬性定義網(wǎng)站上可以訪問cookie的頁面的路徑断部,缺省狀態(tài)下Path為產(chǎn)生cookie時的路徑,此時cookie可以被該路徑以及其子路徑下的頁面訪問班缎;可以將Path設(shè)置為/蝴光,使cookie可以被網(wǎng)站下所有頁面訪問她渴。

Secure 屬性值定義cookie的安全性,當(dāng)該值為true時必須是HTTPS狀態(tài)下cookie才從客戶端附加在HTTP消息中發(fā)送到服務(wù)端蔑祟,在HTTP時cookie是不發(fā)送的趁耗;Secure為false時則可在HTTP狀態(tài)下傳遞cookie,Secure缺省為false疆虚。

Version 屬性定義cookie的版本对粪,由cookie的創(chuàng)建者定義。

Cookie的創(chuàng)建

Cookie可以在服務(wù)器端創(chuàng)建装蓬,然后cookie信息附加在HTTP消息頭中傳到客戶端,如果cookie定義了有效期纱扭,則本保存在客戶端本地磁盤牍帚。保存cookie的文件是一個文本文件,因此不用擔(dān)心此文件中的內(nèi)容會被執(zhí)行而破壞客戶的機器乳蛾。支持Web端開發(fā)的語言都有創(chuàng)建cookie的方法或函數(shù)暗赶,以及設(shè)置cookie屬性和添加自定義屬性的方法或函數(shù),最后是將cookie附加到返回客戶端的HTTP消息頭中肃叶。

創(chuàng)建cookie時如果不指定生存有效時間蹂随,則cookie只在瀏覽器關(guān)閉前有效,cookie會在服務(wù)器端和客戶端傳輸因惭,但是不會保存在客戶機的磁盤上岳锁,打開新的瀏覽器將不能獲得原先創(chuàng)建的cookie信息。

Cookie信息保存在本地時會保存到當(dāng)前登錄用戶專門目錄下蹦魔,保存的cookie文件名中會包含創(chuàng)建cookie所在頁面網(wǎng)站的域名激率,當(dāng)瀏覽器再次連接該網(wǎng)站時,會從本機cookie存放目錄下選出該網(wǎng)站的有效cookie勿决,將保存在其中的信息附加在HTTP消息頭中發(fā)送到服務(wù)器端乒躺,服務(wù)器端程序就可根據(jù)上次保存在cookie的信息為訪問客戶提供“記憶”或個性化服務(wù)。

Cookie除了可以在服務(wù)器端創(chuàng)建外低缩,也可以在客戶端的瀏覽器中用客戶端腳本(如javascript)創(chuàng)建嘉冒。客戶端創(chuàng)建的cookie的性質(zhì)和服務(wù)器端創(chuàng)建的cookie一樣咆繁,可以保存在本地讳推,也可以被傳送到服務(wù)器端被服務(wù)器程序讀取。

Cookie 基礎(chǔ)知識

cookie 是有大小限制的玩般,大多數(shù)瀏覽器支持最大為 4096 字節(jié)的 Cookie(具體會有所差異娜遵,可以使用這個好用的工具:http://browsercookielimits.squawky.net/ 進行測試);如果 cookie 字符串的長度超過最大限制,則該屬性將返回空字符串壤短。
由于 cookie 最終都是以文件形式存放在客戶端計算機中设拟,所以查看和修改 cookie 都是很方便的慨仿,這就是為什么常說 cookie 不能存放重要信息的原因。
每個 cookie 的格式都是這樣的:cookieName = Vaue纳胧;名稱和值都必須是合法的標(biāo)示符镰吆。
cookie 是存在 有效期的。在默認情況下跑慕,一個 cookie 的生命周期就是在瀏覽器關(guān)閉的時候結(jié)束万皿。如果想要 cookie 能在瀏覽器關(guān)掉之后還可以使用,就必須要為該 cookie 設(shè)置有效期核行,也就是 cookie 的失效日期牢硅。
alert(typeof document.cookie)結(jié)果是 string.
cookie 有域和路徑這個概念。域就是domain的概念芝雪,因為瀏覽器是個注意安全的環(huán)境减余,所以不同的域之間是不能互相訪問 cookie 的(當(dāng)然可以通過特殊設(shè)置的達到 cookie 跨域訪問)。路徑就是routing的概念惩系,一個網(wǎng)頁所創(chuàng)建的 cookie 只能被與這個網(wǎng)頁在同一目錄或子目錄下得所有網(wǎng)頁訪問位岔,而不能被其他目錄下得網(wǎng)頁訪問(這句話有點繞,一會看個例子就好理解了)堡牡。
其實創(chuàng)建cookie的方式和定義變量的方式有些相似抒抬,都需要使用 cookie 名稱和 cookie 值。同個網(wǎng)站可以創(chuàng)建多個 cookie 晤柄,而多個 cookie 可以存放在同一個cookie 文件中擦剑。
cookie 存在兩種類型:①:你瀏覽的當(dāng)前網(wǎng)站本身設(shè)置的 cookie ②來自在網(wǎng)頁上嵌入廣告或圖片等其他域來源的 第三方 cookie (網(wǎng)站可通過使用這些 cookie 跟蹤你的使用信息)
cookie 有兩種清除方式:①:通過瀏覽器工具清除 cookie (有第三方的工具,瀏覽器自身也有這種功能) ②通過設(shè)置 cookie 的有效期來清除 cookie.注:刪除 cookie 有時可能導(dǎo)致某些網(wǎng)頁無法正常運行芥颈。
瀏覽器可以通過設(shè)置來接受和拒絕訪問 cookie抓于。出于功能和性能的原因考慮,建議盡量降低 cookie 的使用數(shù)量浇借,并且要盡量使用小 cookie捉撮。

Cookie的使用

從cookie的定義可以看到,cookie一般用于采用HTTP作為進行信息交換協(xié)議的客戶端和服務(wù)器端用于記錄需要持久化的信息妇垢。一般是由服務(wù)器端創(chuàng)建要記錄的信息巾遭,然后傳遞到客戶端,由客戶端從HTTP消息中取出信息闯估,保存在本機磁盤上灼舍。當(dāng)客戶端再次訪問服務(wù)器端時,從本機磁盤上讀出原來保存的信息涨薪,附加到HTTP消息中發(fā)送給服務(wù)器端骑素,服務(wù)器端從HTTP消息中讀取信息,根據(jù)實際應(yīng)用的需求進行進一步的處理刚夺。

服務(wù)器端cookie的創(chuàng)建和再次讀取功能通常由服務(wù)器端編程語言實現(xiàn)献丑,客戶端cookie的保存末捣、讀取一般由瀏覽器來提供,并且對cookie的安全性方面可以進行設(shè)置创橄,如是否可以在本機保存cookie箩做。

由于cookie信息以明文方式保存在文本文件中,對一些敏感信息如口令妥畏、銀行帳號如果要保存在本地cookie文件中邦邦,最好采用加密形式。

與cookie類似的另一個概念是會話(Session)醉蚁,會話一般是記錄客戶端和服務(wù)器端從客戶端瀏覽器連接上服務(wù)器端到關(guān)閉瀏覽器期間的持久信息燃辖。會話一般保存在內(nèi)存中,不保存到磁盤上网棍。會話可以通過cookie機制來實現(xiàn)黔龟,對于不支持cookie的客戶端,會話可以采用URL重寫方式來實現(xiàn)确沸。可以將會話理解為內(nèi)存中的cookie俘陷。

使用會話會對系統(tǒng)伸縮性造成負面影響罗捎,當(dāng)服務(wù)器端要在很多臺服務(wù)器上同步復(fù)制會話對象時,系統(tǒng)性能會受到較大傷害拉盾,尤其會話對象較大時桨菜。這種情況下可以采用cookie,將需要記錄的信息保存在客戶端捉偏,每次請求時發(fā)送到服務(wù)器端倒得,服務(wù)器端不保留狀態(tài)信息,避免在服務(wù)器端多臺機器上復(fù)制會話而造成的性能下降夭禽。

Cookie 基本操作

對于 Cookie 得常用操作有霞掺,存取,讀取讹躯,以及設(shè)置有效期菩彬;具體可以參照 JavaScript 操作 Cookie 一文;但潮梯,近期在前端編碼方面骗灶,皆以Vue為沖鋒利器,所以就有用到一款插件 vue-cookie,其代碼僅30行秉馏,堪稱精妙耙旦,讀取操作如下:

set: function (name, value, days) {
var d = new Date;
d.setTime(d.getTime() + 2460601000days);
window.document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString();
},
get: function (name) {
var v = window.document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
return v ? v[2] : null;
},
delete: function (name) {
this.set(name, '', -1);
}

cookie 域概念

路徑能解決在同一個域下訪問 cookie 的問題,咱們接著說 cookie 實現(xiàn)同域之間訪問的問題萝究。語法如下:

document.cookie = “name=value;path=path;domain=domain“

紅色的domain就是設(shè)置的 cookie 域的值免都。例如 “www.qq.com” 與 “sports.qq.com” 公用一個關(guān)聯(lián)的域名”qq.com”锉罐,我們?nèi)绻胱尅?a target="_blank" rel="nofollow">sports.qq.com” 下的cookie被 “www.qq.com” 訪問,我們就需要用到cookie 的domain屬性琴昆,并且需要把path屬性設(shè)置為 “/“氓鄙。例:

document.cookie = “username=Darren;path=/;domain=qq.com“

注:一定的是同域之間的訪問,不能把domain的值設(shè)置成非主域的域名业舍。

cookie 安全性

通常 cookie 信息都是使用HTTP連接傳遞數(shù)據(jù)抖拦,這種傳遞方式很容易被查看,在控制臺下運行document.cookie,一目了然舷暮;所以 cookie 存儲的信息容易被竊取态罪。假如 cookie 中所傳遞的內(nèi)容比較重要,那么就要求使用加密的數(shù)據(jù)傳輸下面。所以 cookie 的這個屬性的名稱是“secure”复颈,默認的值為空。如果一個 cookie 的屬性為secure沥割,那么它與服務(wù)器之間就通過HTTPS或者其它安全協(xié)議傳遞數(shù)據(jù)耗啦。語法如下:

document.cookie = “username=Darren;secure”

把cookie設(shè)置為secure,只保證 cookie 與服務(wù)器之間的數(shù)據(jù)傳輸過程加密机杜,而保存在本地的 cookie文件并不加密帜讲。如果想讓本地cookie也加密,得自己加密數(shù)據(jù)椒拗。

注: 就算設(shè)置了secure 屬性也并不代表他人不能看到你機器本地保存的 cookie 信息似将,所以說到底,別把重要信息放cookie就對了蚀苛。

Session詳解

Session即回話在验,指一種持續(xù)性的、雙向的連接堵未。Session與Cookie在本質(zhì)上沒有區(qū)別腋舌,都是針對HTTP協(xié)議的局限性而提出的一種保持客戶端和服務(wù)器間保持會話連接狀態(tài)的機制。Session也是一個通用的標(biāo)準(zhǔn)渗蟹,但在不同的語言中實現(xiàn)有所不同侦厚。針對Web網(wǎng)站來說,Session指用戶在瀏覽某個網(wǎng)站時拙徽,從進入網(wǎng)站到瀏覽器關(guān)閉這段時間內(nèi)的會話刨沦。由此可知,Session實際上是一個特定的時間概念膘怕。

使用Session可以在網(wǎng)站的上下文不同頁面間傳遞變量想诅、用戶身份認證、程序狀態(tài)記錄等。常見的形式就是配合Cookie使用来破,實現(xiàn)保存用戶登錄狀態(tài)功能篮灼。和Cookie一樣,session_start() 必須在程序最開始執(zhí)行徘禁,前面不能有任何輸出內(nèi)容诅诱,否則會出現(xiàn)警告。PHP的Session默認通過文件的方式實現(xiàn)送朱,即存儲在服務(wù)器端的Session文件娘荡,每個Session一個文件。

Session通過一個稱為PHPSESSID的Cookie和服務(wù)器聯(lián)系驶沼。Session是通過sessionID判斷客戶端用戶的炮沐,即Session文件的文件名。sessionID實際上是在客戶端和服務(wù)端之間通過HTTP Request 和 HTTP Response傳來傳去回怜。sessionID按照一定的算法生成大年,必須包含在 HTTP Request 里面,保證唯一性和隨機性玉雾,以確保Session的安全翔试。如果沒有設(shè)置 Session 的生成周期, sessionID存儲在內(nèi)存中复旬,關(guān)閉瀏覽器后該ID自動注銷垦缅;重新請求該頁面,會重新注冊一個sessionID赢底。如果客戶端沒有禁用Cookie失都,Cookie在啟動Session回話的時候扮演的是存儲sessionID 和 Session 生存期的角色柏蘑。Session過期后幸冻,PHP會對其進行回收。

假設(shè)客戶端禁用Cookie咳焚,可以通過URL或者隱藏表單傳遞sessionID洽损;php.ini中把session.use_trans_sid 設(shè)成1,那么連接后就會自己加Session的ID革半。

Session以文件的形式存放在本地硬盤的一個目錄中碑定,當(dāng)比較多時,磁盤讀取文件就會比較慢又官,因此把Session分目錄存放延刘。

對于訪問量大的站點,用默認的Session存儲方式并不適合六敬,較優(yōu)的方法是用Data Base存取Session碘赖。在大流量的網(wǎng)站中,Session入庫存在效率不高、占據(jù)數(shù)據(jù)庫connection資源等問題普泡。針對這種情況播掷,可以使用Memcached、Redis等Key-Value數(shù)據(jù)存儲方案實現(xiàn)高并發(fā)撼班、大流量的Session存儲歧匈。

session與cookie的區(qū)別:

1,session 在服務(wù)器端砰嘁,cookie 在客戶端(瀏覽器)
2件炉,session 存在在服務(wù)器的一個文件里(默認),不是內(nèi)存
3般码,session 的運行依賴 session id妻率,而 session id 是存在 cookie 中的,也就是說板祝,如果 瀏覽器禁用了 cookie 宫静,同時 session 也會失效(當(dāng)然也可以在 url 中傳遞)
4,session 可以放在 文件券时,數(shù)據(jù)庫孤里,或內(nèi)存中都可以。
5橘洞,用戶驗證這種場合一般會用 session
因此捌袜,維持一個會話的核心就是客戶端的唯一標(biāo)識,即 session id

更為詳盡的說法:

由于HTTP協(xié)議是無狀態(tài)的協(xié)議炸枣,所以服務(wù)端需要記錄用戶的狀態(tài)時虏等,就需要用某種機制來識具體的用戶,這個機制就是Session.典型的場景比如購物車适肠,當(dāng)你點擊下單按鈕時霍衫,由于HTTP協(xié)議無狀態(tài),所以并不知道是哪個用戶操作的侯养,所以服務(wù)端要為特定的用戶創(chuàng)建了特定的Session敦跌,用用于標(biāo)識這個用戶,并且跟蹤用戶逛揩,這樣才知道購物車?yán)锩嬗袔妆緯_@個Session是保存在服務(wù)端的,有一個唯一標(biāo)識辩稽。在服務(wù)端保存Session的方法很多惧笛,內(nèi)存、數(shù)據(jù)庫逞泄、文件都有患整。集群的時候也要考慮Session的轉(zhuǎn)移静檬,在大型的網(wǎng)站,一般會有專門的Session服務(wù)器集群并级,用來保存用戶會話拂檩,這個時候 Session 信息都是放在內(nèi)存的,使用一些緩存服務(wù)比如Memcached之類的來放 Session嘲碧。
思考一下服務(wù)端如何識別特定的客戶稻励?這個時候Cookie就登場了。每次HTTP請求的時候愈涩,客戶端都會發(fā)送相應(yīng)的Cookie信息到服務(wù)端望抽。實際上大多數(shù)的應(yīng)用都是用 Cookie 來實現(xiàn)Session跟蹤的,第一次創(chuàng)建Session的時候履婉,服務(wù)端會在HTTP協(xié)議中告訴客戶端煤篙,需要在 Cookie 里面記錄一個Session ID,以后每次請求把這個會話ID發(fā)送到服務(wù)器毁腿,我就知道你是誰了辑奈。有人問,如果客戶端的瀏覽器禁用了 Cookie 怎么辦已烤?一般這種情況下鸠窗,會使用一種叫做URL重寫的技術(shù)來進行會話跟蹤,即每次HTTP交互胯究,URL后面都會被附加上一個諸如 sid=xxxxx 這樣的參數(shù)稍计,服務(wù)端據(jù)此來識別用戶。
Cookie其實還可以用在一些方便用戶的場景下裕循,設(shè)想你某次登陸過一個網(wǎng)站臣嚣,下次登錄的時候不想再次輸入賬號了,怎么辦剥哑?這個信息可以寫到Cookie里面硅则,訪問網(wǎng)站的時候,網(wǎng)站頁面的腳本可以讀取這個信息星持,就自動幫你把用戶名給填了抢埋,能夠方便一下用戶弹灭。這也是Cookie名稱的由來督暂,給用戶的一點甜頭。

所以穷吮,總結(jié)一下:
Session是在服務(wù)端保存的一個數(shù)據(jù)結(jié)構(gòu)逻翁,用來跟蹤用戶的狀態(tài),這個數(shù)據(jù)可以保存在集群捡鱼、數(shù)據(jù)庫八回、文件中;

Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息缠诅,也是實現(xiàn)Session的一種方式溶浴。

Cookie與Session問答

Cookie運行在客戶端,Session運行在服務(wù)端管引,對嗎士败?

A:不完全正確。Cookie是運行在客戶端褥伴,有客戶端進行管理谅将;Session雖然是運行在服務(wù)器端,但是sessionID作為一個Cookie是存儲在客戶端的重慢。

瀏覽器禁止Cookie饥臂,Cookie就不能用了,但Session不會受瀏覽器影響似踱,對嗎隅熙?

A:錯。瀏覽器禁止Cookie核芽,Cookie確實不能用了猛们,Session會受瀏覽器端的影響。很簡單的實驗狞洋,在登錄一個網(wǎng)站后弯淘,清空瀏覽器的Cookie和隱私數(shù)據(jù),單機后臺的連接吉懊,就會因為丟失Cookie而退出庐橙。當(dāng)然,有辦法通過URL傳遞Session借嗽。

瀏覽器關(guān)閉后态鳖,Cookie和Session都消失了,對嗎恶导?

A:錯浆竭。存儲在內(nèi)存中額Cookie確實會隨著瀏覽器的關(guān)閉而消失,但存儲在硬盤上的不會惨寿。更頑固的是Flash Cookie邦泄,不過現(xiàn)在很多系統(tǒng)優(yōu)化軟件和新版瀏覽器都已經(jīng)支持刪除Flash Cookie嫁盲。百度采用了這樣的技術(shù)記憶用戶:Session在瀏覽器關(guān)閉后也不會消失椅亚,除非正常退出,代碼中使用了顯示的unset刪除Session砂碉。否則Session可能被回收蕉拢,也有可能永遠殘留在系統(tǒng)中特碳。

Session 比 Cookie 更安全嗎诚亚? 不應(yīng)該大量使用Cookie嗎?

A:錯誤午乓。Cookie確實可能存在一些不安全因素站宗,但和JavaScript一樣,即使突破前端驗證益愈,還有后端保障安全份乒。一切都還要看設(shè)計,尤其是涉及提權(quán)的時候腕唧,特別需要注意或辖。通常情況下,Cookie和Session是綁定的枣接,獲得Cookie就相當(dāng)于獲得了Session颂暇,客戶端把劫持的Cookie原封不動地傳給服務(wù)器,服務(wù)器收到后但惶,原封不動地驗證Session耳鸯,若Session存在,就實現(xiàn)了Cookie和Session的綁定過程膀曾。因此县爬,不存在Session比Cookie更安全這種說法。如果說不安全添谊,也是由于代碼不安全财喳,錯誤地把用作身份驗證的Cookie作為權(quán)限驗證來使用。

Session是創(chuàng)建在服務(wù)器上的斩狱,應(yīng)該少用Session而多用Cookie耳高,對嗎?

A:錯所踊。Cookie可以提高用戶體驗泌枪,但會加大網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸量,應(yīng)盡量在Cookie中僅保存必要的數(shù)據(jù)秕岛。

如果把別人機器上的Cookie文件復(fù)制到我的電腦上(假設(shè)使用相同的瀏覽器)碌燕,是不是能夠登錄別人的帳號呢?如何防范继薛?

A:是的修壕。這屬于Cookie劫持的一種做法。要避免這種情況惋增,需要在Cookie中針對IP叠殷、UA等加上特殊的校驗信息改鲫,然后和服務(wù)器端進行比對诈皿。

在IE瀏覽器下登錄某網(wǎng)站林束,換成Firefox瀏覽器是否仍然是未登錄狀態(tài)?使用IE登錄了騰訊網(wǎng)站后稽亏,為什么使用Firefox能保持登錄狀態(tài)壶冒?

A:不同瀏覽器使用不同的Cookie管理機制,無法實現(xiàn)公用Cookie截歉。如果使用IE登錄騰訊網(wǎng)站胖腾,使用Firefox也能登錄,這是由于在安裝騰訊QQ軟件時瘪松,你的電腦上同時安裝了針對這兩個瀏覽器的插件咸作,可以識別本地已登錄QQ號碼進而自動登錄。本質(zhì)上宵睦,不屬于共用Cookie的范疇记罚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市壳嚎,隨后出現(xiàn)的幾起案子桐智,更是在濱河造成了極大的恐慌,老刑警劉巖烟馅,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件说庭,死亡現(xiàn)場離奇詭異,居然都是意外死亡郑趁,警方通過查閱死者的電腦和手機刊驴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寡润,“玉大人缺脉,你說我怎么就攤上這事≡么” “怎么了攻礼?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長栗柒。 經(jīng)常有香客問我礁扮,道長,這世上最難降的妖魔是什么瞬沦? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任太伊,我火速辦了婚禮,結(jié)果婚禮上逛钻,老公的妹妹穿的比我還像新娘僚焦。我一直安慰自己,他們只是感情好曙痘,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布芳悲。 她就那樣靜靜地躺著立肘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪名扛。 梳的紋絲不亂的頭發(fā)上谅年,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音肮韧,去河邊找鬼融蹂。 笑死,一個胖子當(dāng)著我的面吹牛弄企,可吹牛的內(nèi)容都是我干的超燃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼拘领,長吁一口氣:“原來是場噩夢啊……” “哼淋纲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起院究,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洽瞬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后业汰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伙窃,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年样漆,在試婚紗的時候發(fā)現(xiàn)自己被綠了为障。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡放祟,死狀恐怖鳍怨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跪妥,我是刑警寧澤鞋喇,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站眉撵,受9級特大地震影響侦香,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纽疟,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一罐韩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧污朽,春花似錦散吵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晦款。三九已至,卻和暖如春顷锰,著一層夾襖步出監(jiān)牢的瞬間柬赐,已是汗流浹背亡问。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工官紫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人州藕。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓束世,卻偏偏與公主長得像,于是被迫代替她去往敵國和親床玻。 傳聞我的和親對象是個殘疾皇子毁涉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 注:本文轉(zhuǎn)載自前端大全 背景 在HTTP協(xié)議的定義中,采用了一種機制來記錄客戶端和服務(wù)器端交互的信息锈死,這種機制被稱...
    楠小忎閱讀 673評論 0 0
  • 背景在HTTP協(xié)議的定義中贫堰,采用了一種機制來記錄客戶端和服務(wù)器端交互的信息,這種機制被稱為cookie待牵,cooki...
    時芥藍閱讀 2,366評論 1 17
  • 我們生而自由其屏,又處處枷鎖。 我們總是充滿了焦慮缨该,擔(dān)心著成績偎行,擔(dān)心著如何找到好的工作,好的伴侶贰拿。似乎想起來蛤袒,人生充滿...
    筆繭閱讀 465評論 0 42
  • 感覺吃飯就是為了完成任務(wù),一點味口都沒有……不想吃飯!不想吃飯!!不想吃飯!!!
    水無痕吉閱讀 102評論 0 0
  • 前情回顧: 戰(zhàn)爭片天生就和迪士尼公主電影相性不合——「花木蘭」評測 本文是迪士尼公主電影系列評測的第九篇文章 今天...
    放開那只櫓毅基閱讀 1,730評論 3 8