session,cookie的區(qū)別,安全性

一,為什么session,cookie經(jīng)常會(huì)有人提到

  • 做web開發(fā)的人基本上都會(huì)用session和cookie,但是僅僅只是會(huì)用,并不知道session和cookie的真正的工作原理,都只是憑著感覺來猜測(cè)。web開發(fā)者只要利用它們來完成工作就行了,所以每個(gè)人的理解基本都會(huì)有大同小異,我想這就是session,cookie經(jīng)常會(huì)被討論的原因。本文也是根據(jù)個(gè)人經(jīng)驗(yàn),以及個(gè)人所學(xué),對(duì)session,cookie的一些看法,純屬個(gè)人見解,希望得到大家的更正和建議。
    二,什么cookie
  • cookie分為二種
    1,以文件方式存在硬盤空間上的長(zhǎng)期性的cookie
    2,停留在瀏覽器所占內(nèi)存中的臨時(shí)性的cookie
    瀏覽網(wǎng)站時(shí),你會(huì)經(jīng)常發(fā)現(xiàn)網(wǎng)站登錄的地方,會(huì)有提示,問你是不是要記住自己的登錄狀態(tài),像這種情況,登錄時(shí)填寫的一些信息會(huì)被以文件的方式存放在客戶端的硬盤上。
    當(dāng)用戶登錄后,session會(huì)在cookie端產(chǎn)生一個(gè)session_id,這個(gè)session_id是存于瀏覽器所占用的內(nèi)存當(dāng)中。當(dāng)你關(guān)閉瀏覽器后,session_id也要消失了。
  • cookie采用的是在客戶端保持狀態(tài)的方案,它是客戶端的會(huì)話狀態(tài)的一種儲(chǔ)存機(jī)制。它是服務(wù)器在本地機(jī)器上存儲(chǔ)的小段文本或者是內(nèi)存中的一段數(shù)據(jù),并隨每一個(gè)請(qǐng)求發(fā)送至同一個(gè)服務(wù)器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie規(guī)范。網(wǎng)絡(luò)服務(wù)器用HTTP頭信息向客戶端發(fā)送cookies,在客戶終端,瀏覽器解析這些cookies并將它們保存為一個(gè)本地文件,或者本地內(nèi)存中數(shù)據(jù),它會(huì)自動(dòng)將同一服務(wù)器的任何請(qǐng)求縛上這些cookies,由于采用服務(wù)器端保持狀態(tài)的方案在客戶端也需要保存一個(gè)標(biāo)識(shí),所以session機(jī)制借助于cookie機(jī)制來達(dá)到保存標(biāo)識(shí)的目的,這樣就可以解決HTTP協(xié)議無狀態(tài)的缺陷。
    三,什么是session
  • session是一種服務(wù)器端的信息管理機(jī)制,它把這些文件信息以文件的形勢(shì)存放在服務(wù)器的硬盤空間上,這種情況是默認(rèn)的,可以用memcache把這種數(shù)據(jù)放到內(nèi)存里面。請(qǐng)參考web集群時(shí)利用memcache來同步session
    當(dāng)客戶端向服務(wù)器發(fā)出請(qǐng)求時(shí),要求服務(wù)器端產(chǎn)生一個(gè)session時(shí),服務(wù)器端會(huì)先檢查一下,客戶端的cookie里面有沒有session_id,是否已經(jīng)過期。如果有這樣的session_id的話,服務(wù)器端會(huì)根據(jù)cookie里的session_id把服務(wù)器的session檢索出來。如果沒有這樣的session_id的話,服務(wù)器端會(huì)重新建立一個(gè)。PHPSESSID是一串加了密的字符串,它的生成按照一定的規(guī)則來執(zhí)行。同一客戶端啟動(dòng)二次session_start的話,session_id是不一樣的。
Host
*****************.com

User-Agent
Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6

Accept
text/css,*/*;q=0.1

Accept-Language
zh-cn,zh;q=0.5

Accept-Encoding
gzip,deflate

Accept-Charset
UTF-8,*

Keep-Alive
115

Connection
keep-alive

Referer
http://***************.com/

Cookie
BX=7f34kbl5d3m3g&b=3&s=9t; AWSUSER_ID=awsuser_id1267685109158r8091;**PHPSESSID=us1o22h4iveo4uni3iksab**
**reh4
**

If-Modified-Since
Tue, 29 Jun 2010 07:55:38 GMT
  • 上面是一次請(qǐng)求的頭信息。
  • session產(chǎn)生的session_id放在cookie里面,如果用戶把cookie禁止掉,是不是session也不能用了呢?禁止掉cookie后,session當(dāng)然可以用,不過通過其他的方式來獲得這個(gè)sessionid,比如,可以根在url的后面,或者以表單的形勢(shì)提交到服務(wù)器端。從而使服務(wù)器端了解客戶端的狀態(tài)。
    四,session和cookie誰更安全
  • 就個(gè)人而言,我覺得session更安全一點(diǎn),我以下幾點(diǎn)看法。
    1,如果session和cookie一樣安全的話,二者就沒有并要同時(shí)存在了,只要cookie就好了,讓客戶端來分提服務(wù)器的負(fù)擔(dān),并且對(duì)于用戶來說又是透明的。何樂而不為呢。
    2,session的sessionID是放在cookie里,要想功破session的話,第一要功破cookie。功破cookie后,你要得到 sessionID,sessionID是要有人登錄,或者啟動(dòng)session_start才會(huì)有,你不知道什么時(shí)候會(huì)有人登錄。第二,sessionID是加密的,第二次session_start的時(shí)候,前一次的sessionID就沒有用了,session過期時(shí)sessionid也會(huì)失效,想在短時(shí)間內(nèi)功破加了密的 sessionID很難。session是針對(duì)某一次通信而言,會(huì)話結(jié)束session也就隨著消失了,而真正的cookie存在于客戶端硬盤上的一個(gè)文本文件,誰安全很顯然了。
    3,如果session這么容易被功破,這么不安全的話,我想現(xiàn)有的絕大部分網(wǎng)站都不安全了。

轉(zhuǎn)載http://blog.51yip.com/php/938.html

最后編輯于
?著作權(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)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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