一丧失,為什么session,cookie經(jīng)常會有人提到
- 做web開發(fā)的人基本上都會用session和cookie,但是僅僅只是會用砂代,并不知道session和cookie的真正的工作原理蹋订,都只是憑著感覺來猜測。web開發(fā)者只要利用它們來完成工作就行了刻伊,所以每個人的理解基本都會有大同小異露戒,我想這就是session椒功,cookie經(jīng)常會被討論的原因。本文也是根據(jù)個人經(jīng)驗智什,以及個人所學(xué)动漾,對session,cookie的一些看法,純屬個人見解荠锭,希望得到大家的更正和建議旱眯。
二,什么cookie - cookie分為二種
1证九,以文件方式存在硬盤空間上的長期性的cookie
2删豺,停留在瀏覽器所占內(nèi)存中的臨時性的cookie
瀏覽網(wǎng)站時,你會經(jīng)常發(fā)現(xiàn)網(wǎng)站登錄的地方甫贯,會有提示,問你是不是要記住自己的登錄狀態(tài)看蚜,像這種情況叫搁,登錄時填寫的一些信息會被以文件的方式存放在客戶端的硬盤上。
當用戶登錄后供炎,session會在cookie端產(chǎn)生一個session_id渴逻,這個session_id是存于瀏覽器所占用的內(nèi)存當中。當你關(guān)閉瀏覽器后音诫,session_id也要消失了惨奕。 - cookie采用的是在客戶端保持狀態(tài)的方案,它是客戶端的會話狀態(tài)的一種儲存機制竭钝。它是服務(wù)器在本地機器上存儲的小段文本或者是內(nèi)存中的一段數(shù)據(jù)梨撞,并隨每一個請求發(fā)送至同一個服務(wù)器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie規(guī)范香罐。網(wǎng)絡(luò)服務(wù)器用HTTP頭信息向客戶端發(fā)送cookies卧波,在客戶終端,瀏覽器解析這些cookies并將它們保存為一個本地文件庇茫,或者本地內(nèi)存中數(shù)據(jù)港粱,它會自動將同一服務(wù)器的任何請求縛上這些cookies,由于采用服務(wù)器端保持狀態(tài)的方案在客戶端也需要保存一個標識旦签,所以session機制借助于cookie機制來達到保存標識的目的查坪,這樣就可以解決HTTP協(xié)議無狀態(tài)的缺陷。
三宁炫,什么是session - session是一種服務(wù)器端的信息管理機制偿曙,它把這些文件信息以文件的形勢存放在服務(wù)器的硬盤空間上,這種情況是默認的羔巢,可以用memcache把這種數(shù)據(jù)放到內(nèi)存里面遥昧。請參考web集群時利用memcache來同步session
當客戶端向服務(wù)器發(fā)出請求時覆醇,要求服務(wù)器端產(chǎn)生一個session時,服務(wù)器端會先檢查一下炭臭,客戶端的cookie里面有沒有session_id永脓,是否已經(jīng)過期。如果有這樣的session_id的話鞋仍,服務(wù)器端會根據(jù)cookie里的session_id把服務(wù)器的session檢索出來常摧。如果沒有這樣的session_id的話,服務(wù)器端會重新建立一個威创。PHPSESSID是一串加了密的字符串落午,它的生成按照一定的規(guī)則來執(zhí)行。同一客戶端啟動二次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
- 上面是一次請求的頭信息。
- session產(chǎn)生的session_id放在cookie里面吸申,如果用戶把cookie禁止掉梗劫,是不是session也不能用了呢?禁止掉cookie后截碴,session當然可以用梳侨,不過通過其他的方式來獲得這個sessionid,比如日丹,可以根在url的后面走哺,或者以表單的形勢提交到服務(wù)器端。從而使服務(wù)器端了解客戶端的狀態(tài)哲虾。
四丙躏,session和cookie誰更安全 - 就個人而言,我覺得session更安全一點束凑,我以下幾點看法彼哼。
1,如果session和cookie一樣安全的話湘今,二者就沒有并要同時存在了敢朱,只要cookie就好了,讓客戶端來分提服務(wù)器的負擔摩瞎,并且對于用戶來說又是透明的拴签。何樂而不為呢。
2旗们,session的sessionID是放在cookie里蚓哩,要想功破session的話,第一要功破cookie上渴。功破cookie后岸梨,你要得到 sessionID,sessionID是要有人登錄喜颁,或者啟動session_start才會有,你不知道什么時候會有人登錄曹阔。第二半开,sessionID是加密的,第二次session_start的時候赃份,前一次的sessionID就沒有用了寂拆,session過期時sessionid也會失效,想在短時間內(nèi)功破加了密的 sessionID很難抓韩。session是針對某一次通信而言纠永,會話結(jié)束session也就隨著消失了,而真正的cookie存在于客戶端硬盤上的一個文本文件谒拴,誰安全很顯然了尝江。
3,如果session這么容易被功破英上,這么不安全的話炭序,我想現(xiàn)有的絕大部分網(wǎng)站都不安全了。
轉(zhuǎn)載http://blog.51yip.com/php/938.html