Cookie 和 Session的区别
cookies和session這兩個(gè)東西經(jīng)常會(huì)在面試當(dāng)中問(wèn)到,算是比較基礎(chǔ)的知識(shí),但是還是需要做一下深入理解。
Session
Session:在計(jì)算機(jī)中,尤其是在網(wǎng)絡(luò)應(yīng)用當(dāng)中,被稱為“會(huì)話控制”。Session
對(duì)象存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息。
當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session時(shí),服務(wù)器首先檢查這個(gè)客戶端的請(qǐng)求里是否已包含了一個(gè)session標(biāo)識(shí)(稱為SessionID),如果已包含則說(shuō)明以前已經(jīng)為此客戶端創(chuàng)建過(guò)session,服務(wù)器就按照SessionID把這個(gè)session檢索出來(lái)使用(檢索不到,會(huì)新建一個(gè)),如果客戶端請(qǐng)求不包含SessionID,則為此客戶端創(chuàng)建一個(gè)session并且生成一個(gè)與此session相關(guān)聯(lián)的SessionID,SessionID的值應(yīng)該是一個(gè)既不會(huì)重復(fù),又不容易被找到規(guī)律以仿造的字符串,用來(lái)唯一標(biāo)識(shí)session,這個(gè)SessionID將會(huì)在本次響應(yīng)中返回給客戶端保存。
Session保存在服務(wù)器端,為了獲取更高的存取速度,服務(wù)器一般會(huì)把Session放在內(nèi)存里面,每個(gè)用戶都會(huì)有一個(gè)獨(dú)立的Session。如果Session里面的內(nèi)容太過(guò)復(fù)雜,當(dāng)大量的用戶訪問(wèn)服務(wù)器時(shí),可能會(huì)導(dǎo)致內(nèi)存溢出,所以我們的Cookie內(nèi)容應(yīng)當(dāng)適當(dāng)?shù)木?jiǎn)。當(dāng)我們第一次訪問(wèn)服務(wù)器時(shí),服務(wù)器會(huì)給我們自動(dòng)創(chuàng)建一個(gè)Session,生成session后,只要用戶繼續(xù)訪問(wèn),服務(wù)器就會(huì)更新session的最后訪問(wèn)時(shí)間,并且維護(hù)這個(gè)session。當(dāng)用戶訪問(wèn)服務(wù)器一次,無(wú)論是否讀寫了session,服務(wù)器都會(huì)認(rèn)定這個(gè)session活躍(active)了一次。
當(dāng)越來(lái)越多的用戶訪問(wèn)我們的服務(wù)器時(shí),因此我們的session會(huì)越來(lái)越多。為了防止內(nèi)存溢出,服務(wù)器會(huì)把長(zhǎng)時(shí)間沒(méi)有活躍的Session刪除。這個(gè)時(shí)間就是session的超時(shí)時(shí)間,過(guò)了超時(shí)時(shí)間,我們的session就會(huì)自動(dòng)失效
Cookie
Cookie 可以翻譯為“小甜品,小餅干” ,Cookie在網(wǎng)絡(luò)系統(tǒng)中幾乎無(wú)處不在,當(dāng)我們?yōu)g覽以前訪問(wèn)過(guò)的網(wǎng)站時(shí),網(wǎng)頁(yè)中可能會(huì)出現(xiàn) :你好XXX,這會(huì)讓我們感覺(jué)很親切,就好像吃了一個(gè)小甜品一樣。這其實(shí)是通過(guò)訪問(wèn)主機(jī)中的一個(gè)文件來(lái)實(shí)現(xiàn)的,這個(gè)文件就是 Cookie。在Internet 中,Cookie 實(shí)際上是指小量信息,是由 Web服務(wù)器創(chuàng)建的,將信息存儲(chǔ)在用戶計(jì)算機(jī)上的文件。一般網(wǎng)絡(luò)用戶習(xí)慣用其復(fù)數(shù)形式 Cookies,指某些網(wǎng)站為了辨別用戶身份、進(jìn)行Session 跟蹤而存儲(chǔ)在用戶本地終端上的數(shù)據(jù),而這些數(shù)據(jù)通常會(huì)經(jīng)過(guò)加密處理。
很多網(wǎng)站都會(huì)使用cookie,不同瀏覽器采用不同的方式保存Cookie,而且每個(gè)網(wǎng)站的Cookie只能夠被對(duì)應(yīng)的網(wǎng)站使用。意思就是說(shuō)當(dāng)瀏覽器訪問(wèn)Baidu時(shí),只會(huì)帶Baidu的cookie,而不會(huì)帶其他網(wǎng)站的Cookie,這就是Cookie的不可跨域名性。
Cookie在客戶端是由瀏覽器來(lái)管理的。瀏覽器可以保證各個(gè)網(wǎng)站只能操作各個(gè)網(wǎng)站的Cookie,從而保證用戶的隱私安全。
cookie的主要內(nèi)容包括名字,值,過(guò)期時(shí)間,域和路徑。域和路徑一起構(gòu)成cookie的作用范圍。cookie如果不設(shè)置過(guò)期時(shí)間的話,則表示這個(gè)cookie的生命期為瀏覽器會(huì)話期間,關(guān)閉瀏覽器,這個(gè)cookie就會(huì)消失。這種生命期為瀏覽器會(huì)話期的Cookie被稱為會(huì)話cookie。會(huì)話Cookie一般不保存在硬盤上而是保存在內(nèi)存里,這種行為并不是規(guī)范規(guī)定的。如果Cookie設(shè)置了過(guò)期時(shí)間,瀏覽器就會(huì)把cookie保存到硬盤上,即使瀏覽器關(guān)閉了,這些cookie還是會(huì)一直有效直到過(guò)了過(guò)期時(shí)間。
Cookie并沒(méi)有提供修改和刪除操作,要想修改某一個(gè)Cookie只需要新建一個(gè)同名的Cookie,添加到請(qǐng)求里面去覆蓋原來(lái)的Cookie。刪除也是如此,只需要將要?jiǎng)h除的Cookie的過(guò)期時(shí)間設(shè)置成現(xiàn)在時(shí)間的之前就可以了,然后再覆蓋原來(lái)的Cookie。需要注意的是:要修改的和要?jiǎng)h除Cookie的名字(name),域名(domain)和路徑(Path)等除了值(value)和過(guò)期時(shí)間這兩個(gè)屬性之外必須和原來(lái)完全一樣。否則,瀏覽器就會(huì)將請(qǐng)求里面的Cookie設(shè)為新的Cookie,相當(dāng)于覆蓋失敗,也就是刪除和修改失敗了。
Session和Cookie的區(qū)別
總結(jié)
以上是生活随笔為你收集整理的Cookie 和 Session的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 实践作业4:Web测试实践(小组作业)每
- 下一篇: 十年web老兵整理的web前端文章