老生常談session,cookie的區別,安全性

一,爲何session,cookie常常會有人提到php

作web開發的人基本上都會用session和cookie,可是僅僅只是會用,並不知 道session和cookie的真正的工做原理,都只是憑着感受來猜想。web開發者只要利用它們來完成工做就好了,因此每一個人的理解基本都會有大同小 異,我想這就是session,cookie常常會被討論的緣由。本文也是根據我的經驗,以及我的所學,對session,cookie的一些見解,純屬 我的看法,但願獲得你們的更正和建議。css


二,什麼cookiehtml

cookie分爲二種web

1,以文件方式存在硬盤空間上的長期性的cookie瀏覽器

2,停留在瀏覽器所佔內存中的臨時性的cookie安全

瀏覽網站時,你會常常發現網站登陸的地方,會有提示,問你是否是要記住本身的登陸狀態,像這種狀況,登陸時填寫的一些信息會被以文件的方式存放在客戶端的硬盤上。服務器

當用戶登陸後,session會在cookie端產生一個session_id,這個session_id是存於瀏覽器所佔用的內存當中。當你關閉瀏覽器後,session_id也要消失了。cookie

cookie採用的是在客戶端保持狀態的方案,它是客戶端的會話狀態的一種儲存機制。它 是服務器在本地機器上存儲的小段文本或者是內存中的一段數據,並隨每個請求發送至同一個服務器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie規範。網絡服務器用HTTP頭信息向客戶端發送cookies,在客戶終端,瀏覽器解析這些cookies並將它們保存爲一個本地文 件,或者本地內存中數據,它會自動將同一服務器的任何請求縛上這些cookies,因爲採用服務器端保持狀態的方案在客戶端也須要保存一個標識,因此 session機制藉助於cookie機制來達到保存標識的目的,這樣就能夠解決HTTP協議無狀態的缺陷。網絡

三,什麼是sessionsession

session是一種服務器端的信息管理機制,它把這些文件信息以文件的形勢存放在服務器的硬盤空間上,這種狀況是默認的,能夠用memcache把這種數據放到內存裏面。請參考web集羣時利用memcache來同步session

當客戶端向服務器發出請求時,要求服務器端產生一個session時,服務器端會先檢查 一下,客戶端的cookie裏面有沒有session_id,是否已通過期。若是有這樣的session_id的話,服務器端會根據cookie裏的 session_id把服務器的session檢索出來。若是沒有這樣的session_id的話,服務器端會從新創建一個。PHPSESSID是一串加 了密的字符串,它的生成按照必定的規則來執行。同一客戶端啓動二次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=us1o22h4iveo4uni3iksabreh4
If-Modified-Since Tue, 29 Jun 2010 07:55:38  GMT

上面是一次請求的頭信息。

session產生的session_id放在cookie裏面,若是用戶把 cookie禁止掉,是否是session也不能用了呢?禁止掉cookie後,session固然能夠用,不過經過其餘的方式來得到這個 sessionid,好比,能夠根在url的後面,或者以表單的形勢提交到服務器端。從而使服務器端了解客戶端的狀態。

四,session和cookie誰更安全

就我的而言,我以爲session更安全一點,我如下幾點見解。

1,若是session和cookie同樣安全的話,兩者就沒有並要同時存在了,只要cookie就行了,讓客戶端來分提服務器的負擔,而且對於用戶來講又是透明的。何樂而不爲呢。

2,session的sessionID是放在cookie裏,要想功破session 的話,第一要功破cookie。功破cookie後,你要獲得 sessionID,sessionID是要有人登陸,或者啓動session_start纔會有,你不知道何時會有人登陸。第 二,sessionID是加密的,第二次session_start的時候,前一次的sessionID就沒有用了,session過時時 sessionid也會失效,想在短期內功破加了密的 sessionID很難。session是針對某一次通訊而言,會話結束session也就隨着消失了,而真正的cookie存在於客戶端硬盤上的一個文 本文件,誰安全很顯然了。

3,若是session這麼容易被功破,這麼不安全的話,我想現有的絕大部分網站都不安全了。

相關文章
相關標籤/搜索