cookie 和session 的區別詳解


本文主要是參考了原作者:lemrose   http://blog.csdn.net/axin66ok/article/details/6175522

 

1.cookie 是一種發送到客戶瀏覽器的文本串句柄,並保存在客戶機硬盤上,可以用來在某個WEB站點會話間持久的保持數據。

 

 

2.session其實指的就是訪問者從到達某個特定主頁到離開為止的那段時間。 Session其實是利用Cookie進行信息處理的,當用戶首先進行了請求后,服務端就在用戶瀏覽器上創建了一個Cookie,當這個Session結束時,其實就是意味着這個Cookie就過期了。
注:為這個用戶創建的Cookie的名稱是aspsessionid。這個Cookie的唯一目的就是為每一個用戶提供不同的身份認證。


3.cookie和session的共同之處在於:cookie和session都是用來跟蹤瀏覽器用戶身份的會話方式。

 


4.cookie 和session的區別是:cookie數據保存在客戶端,session數據保存在服務器端。
  簡單的說,當你登錄一個網站的時候,

 

  • 如果web服務器端使用的是session,那么所有的數據都保存在服務器上,客戶端每次請求服務器的時候會發送當前會話的sessionid,服務器根據當前sessionid判斷相應的用戶數據標志,以確定用戶是否登錄或具有某種權限。由於數據是存儲在服務器上面,所以你不能偽造,但是如果你能夠獲取某個登錄用戶的 sessionid,用特殊的瀏覽器偽造該用戶的請求也是能夠成功的。sessionid是服務器和客戶端鏈接時候隨機分配的,一般來說是不會有重復,但如果有大量的並發請求,也不是沒有重復的可能性.

 

  • 如果瀏覽器使用的是cookie,那么所有的數據都保存在瀏覽器端,比如你登錄以后,服務器設置了cookie用戶名,那么當你再次請求服務器的時候,瀏覽器會將用戶名一塊發送給服務器,這些變量有一定的特殊標記。服務器會解釋為cookie變量,所以只要不關閉瀏覽器,那么cookie變量一直是有效的,所以能夠保證長時間不掉線。如果你能夠截獲某個用戶的 cookie變量,然后偽造一個數據包發送過去,那么服務器還是認為你是合法的。所以,使用 cookie被攻擊的可能性比較大。如果設置了的有效時間,那么它會將 cookie保存在客戶端的硬盤上,下次再訪問該網站的時候,瀏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然后發送給服務器。如果你在機器上面保存了某個論壇 cookie,有效期是一年,如果有人入侵你的機器,將你的  cookie拷走,然后放在他的瀏覽器的目錄下面,那么他登錄該網站的時候就是用你的的身份登錄的。所以 cookie是可以偽造的。當然,偽造的時候需要主意,直接copy    cookie文件到 cookie目錄,瀏覽器是不認的,他有一個index.dat文件,存儲了 cookie文件的建立時間,以及是否有修改,所以你必須先要有該網站的 cookie文件,並且要從保證時間上騙過瀏覽器

 

5.兩個都可以用來存私密的東西,同樣也都有有效期的說法,區別在於session是放在服務器上的,過期與否取決於服務期的設定,cookie是存在客戶端的,過去與否可以在cookie生成的時候設置進去。

(1)cookie數據存放在客戶的瀏覽器上,session數據放在服務器上
(2)cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,如果主要考慮到安全應當使用session
(3)session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,如果主要考慮到減輕服務器性能方面,應當使用COOKIE
(4)單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。
(5)所以:將登陸信息等重要信息存放為SESSION;其他信息如果需要保留,可以放在COOKIE中

 

原作者:施楊 鏈接:http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html

二者的定義:

當你在瀏覽網站的時候,WEB 服務器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇,

都紀錄下來。當下次你再光臨同一個網站,WEB 服務器會先看看有沒有它上次留下的 Cookie 資料,有的話,就會依據 Cookie

里的內容來判斷使用者,送出特定的網頁內容給你。 Cookie 的使用很普遍,許多有提供個人化服務的網站,都是利用 Cookie

來辨認使用者,以方便送出使用者量身定做的內容,像是 Web 接口的免費 email 網站,都要用到 Cookie。


具體來說cookie機制采用的是在客戶端保持狀態的方案,而session機制采用的是在服務器端保持狀態的方案。

同時我們也看到,由於采用服務器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要借助於cookie機制

來達到保存標識的目的,但實際上它還有其他選擇。

cookie機制。正統的cookie分發是通過擴展HTTP協議來實現的,服務器通過在HTTP的響應頭中加上一行特殊的指示以提示

瀏覽器按照指示生成相應的cookie。然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成cookie。而cookie的使用

是由瀏覽器按照一定的原則在后台自動發送給服務器的。瀏覽器檢查所有存儲的cookie,如果某個cookie所聲明的作用范圍

大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給服務器。
 
cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用范圍。若不設置過期時間,則表示這

個cookie的生命期為瀏覽器會話期間,關閉瀏覽器窗口,cookie就消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。

會話cookie一般不存儲在硬盤上而是保存在內存里,當然這種行為並不是規范規定的。若設置了過期時間,瀏覽器就會把cookie

保存到硬盤上,關閉后再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。存儲在硬盤上的cookie可以在不同的瀏

覽器進程間共享,比如兩個IE窗口。而對於保存在內存里的cookie,不同的瀏覽器有不同的處理方式

session機制。session機制是一種服務器端的機制,服務器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。

          當程序需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求里是否已包含了一個session標識

(稱為session id),如果已包含則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來

使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相

關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應

中返回給客戶端保存。保存這個session id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給

服務器。一般這個cookie的名字都是類似於SEEESIONID。但cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時

仍然能夠把session id傳遞回服務器。

經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的后面。還有一種技術叫做表單隱藏字段。就是服務器

會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞回服務器。比如: 
<form name="testform" action="/xxx"> 
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text"> 
</form> 
實際上這種技術可以簡單的用對action應用URL重寫來代替。

cookie 和session 的區別:

1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
   考慮到安全應當使用session。

3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能
   考慮到減輕服務器性能方面,應當使用COOKIE。

4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。

5、所以個人建議:
   將登陸信息等重要信息存放為SESSION
   其他信息如果需要保留,可以放在COOKIE中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM