cookie和session辨析

一、cookie是什么

cookie就是服務(wù)器發(fā)給客戶(hù)端的信息,這些信息以文本文件的方式儲(chǔ)存在諸如瀏覽器等的客戶(hù)端里。然后,如果客戶(hù)端再向相同域名的服務(wù)端發(fā)送請(qǐng)求的時(shí)候,就會(huì)帶上這些信息。從服務(wù)端發(fā)送過(guò)來(lái)的cookie會(huì)出現(xiàn)在http的響應(yīng)頭中(response header),而當(dāng)客戶(hù)端再次向相同域名發(fā)送http請(qǐng)求的時(shí)候,cookie會(huì)出現(xiàn)在請(qǐng)求頭中。

cookie經(jīng)常用來(lái)存放用戶(hù)的身份、密碼等信息,最常見(jiàn)的cookie使用場(chǎng)景就是:在登陸界面,有一個(gè)“是否記住我”的選項(xiàng),當(dāng)勾選以后每戶(hù)發(fā)送請(qǐng)求都會(huì)帶上cookie來(lái)驗(yàn)證用戶(hù)身份,這樣用戶(hù)就避免了重復(fù)輸入用戶(hù)名和密碼了。

對(duì)于設(shè)置cookie,不同的語(yǔ)言有不同的方法,甚至還有一些專(zhuān)門(mén)的插件。當(dāng)在一個(gè)域名下設(shè)置了cookie,之后針對(duì)這個(gè)域名和路徑下所有的請(qǐng)求都會(huì)帶上cookie。

關(guān)于cookie的過(guò)期時(shí)間:cookie的過(guò)期時(shí)間在與cookie的值一同設(shè)定的,它指定了cookie什么時(shí)候不再被發(fā)送至服務(wù)器,而后瀏覽器/服務(wù)端會(huì)刪除該cookie。如果不設(shè)置的話(huà),那么cookie只存在于當(dāng)前會(huì)話(huà)當(dāng)中,瀏覽器一旦關(guān)閉,該cookie就會(huì)被刪除。P.S 但是chrome做了優(yōu)化,在你關(guān)閉以后一點(diǎn)時(shí)間它依然不會(huì)失效。

關(guān)于cookie的域名和路徑:域名(domain)選項(xiàng)決定了cookie被發(fā)送到哪個(gè)域名下,默認(rèn)情況下是與創(chuàng)建cookie相同的域名;路徑(path)的作用與域名選項(xiàng)相同,也是指定了特定的路徑,才會(huì)在請(qǐng)求頭中附加cookie信息。

登陸界面是否記住我的邏輯:當(dāng)用戶(hù)輸入完用戶(hù)名和密碼以后,并且還勾選記住我的情況下,這些信息發(fā)送到服務(wù)端,在服務(wù)端完成用戶(hù)驗(yàn)證以后,服務(wù)端會(huì)在setCookie里做一個(gè)不用重復(fù)輸入密碼的標(biāo)記,然后發(fā)送給客戶(hù)端,用戶(hù)下次再登陸的時(shí)候,在這個(gè)域名和路徑下,這些cookie會(huì)再次發(fā)送到服務(wù)端,服務(wù)端從cookie里讀取了之前的標(biāo)記,就不會(huì)讓用戶(hù)再次輸入用戶(hù)名和密碼,而是直接跳轉(zhuǎn)了。當(dāng)然,這個(gè)cookie的標(biāo)記是有時(shí)間限制的,一旦超過(guò)了,這個(gè)標(biāo)記就會(huì)被瀏覽器刪除。

總結(jié):一般cookie交互過(guò)程如下:
1、客戶(hù)端發(fā)送一個(gè)http請(qǐng)求給服務(wù)端
2、服務(wù)端發(fā)送一個(gè)http響應(yīng)給客戶(hù)端,在響應(yīng)頭中內(nèi)嵌了cookie
3、在相同域名和相同路徑下,客戶(hù)端發(fā)送一個(gè)請(qǐng)求到服務(wù)端,在請(qǐng)求頭中帶上了cookie
4、服務(wù)端發(fā)回一個(gè)http響應(yīng)給客戶(hù)端

二、session是什么?

session的主要用處和cookie一樣,都是用來(lái)記錄用戶(hù)的身份信息。不同的地方在于,cookie是儲(chǔ)存在客戶(hù)端,而session是儲(chǔ)存在服務(wù)端。

因?yàn)閏ookie是儲(chǔ)存在客戶(hù)端,這就引發(fā)了一個(gè)安全問(wèn)題:所有儲(chǔ)存在客戶(hù)端的東西都可以通過(guò)某種方式進(jìn)行人為修改。而session則解決了這一問(wèn)題,因?yàn)樗鼉?chǔ)存在服務(wù)器上。

session的使用邏輯:服務(wù)器先給每一個(gè)發(fā)送過(guò)來(lái)http請(qǐng)求的瀏覽器一個(gè)id,當(dāng)然,這個(gè)id是加密過(guò)的;這個(gè)id會(huì)儲(chǔ)存在瀏覽器的cookie中,所以以后瀏覽器發(fā)送請(qǐng)求的時(shí)候都會(huì)帶上這個(gè)cookie中的id。與此同時(shí),服務(wù)器給每個(gè)用戶(hù)給了一個(gè)session,當(dāng)服務(wù)器驗(yàn)證通過(guò)了用戶(hù)的身份信息,就會(huì)用session[id]在session中做一個(gè)標(biāo)記,這樣下次用戶(hù)再在相同域名/路徑請(qǐng)求時(shí),服務(wù)器在讀取到id并在session中找到了標(biāo)記的話(huà),用戶(hù)就不用再次輸入用戶(hù)名和密碼了。

三、Cookie and Session區(qū)別

1、cookie數(shù)據(jù)存放在客戶(hù)的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上;
2、cookie不是很安全,別人可以分析存放在本地的cookie并進(jìn)行cookie欺騙,考慮到安全應(yīng)當(dāng)使用session;
3、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪(fǎng)問(wèn)增多,會(huì)比較占用你服務(wù)器的性能??紤]到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用cookie;
4、單個(gè)cookie在客戶(hù)端的限制是4K,就是說(shuō)一個(gè)站點(diǎn)在客戶(hù)端存放的cookie不能超過(guò)4K

知乎上馮羅特的回答:

1,session 在服務(wù)器端,cookie 在客戶(hù)端(瀏覽器)
2,session 默認(rèn)被存在在服務(wù)器的一個(gè)文件里(不是內(nèi)存)
3,session 的運(yùn)行依賴(lài) session id,而 session id 是存在 cookie 中的,也就是說(shuō),如果瀏覽器禁用了 cookie ,同時(shí) session 也會(huì)失效(但是可以通過(guò)其它方式實(shí)現(xiàn),比如在 url 中傳遞 session_id)
4,session 可以放在 文件、數(shù)據(jù)庫(kù)、或內(nèi)存中都可以。
5,用戶(hù)驗(yàn)證這種場(chǎng)合一般會(huì)用 session 因此,維持一個(gè)會(huì)話(huà)的核心就是客戶(hù)端的唯一標(biāo)識(shí),即 session id

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,639評(píng)論 19 139
  • http協(xié)議有http0.9,http1.0,http1.1和http2三個(gè)版本,但是現(xiàn)在瀏覽器使用的是htt...
    一現(xiàn)_閱讀 1,999評(píng)論 0 3
  • 作者:晚晴幽草軒www.jeffjade.com/2016/10/31/115-summary-of-cookie...
    饑人谷_Dylan閱讀 1,265評(píng)論 0 51
  • 2016年是參加向組織揩油的第二年,從2015年的懵懂到2016年的略微有眉目,掉了不少坑,當(dāng)然,這些都會(huì)成為17...
    Andy熙閱讀 291評(píng)論 2 2
  • 有人說(shuō),請(qǐng)磨去棱角,學(xué)會(huì)圓潤(rùn),盡量合群!收斂個(gè)性,避免乖張! 那么,請(qǐng)問(wèn),如果所有人在步入社會(huì)中都這樣去做,那是不...
    冽殤閱讀 271評(píng)論 0 0

友情鏈接更多精彩內(nèi)容