1. 程式人生 > >cookie和session的簡單理解和區別

cookie和session的簡單理解和區別

cookie和session的簡單理解和區別

本文只是對cookie和session一個簡單的理解與區分,更深入的理解請訪問理解Cookie和Session機制

來源

由於http是一種無狀態協議,伺服器無法只從網路連線來知曉使用者身份,於是想到用類似一個通行證的東西來記錄使用者的資訊,故而先後出現了cookie、session

cookie和session的定義

  • cookie:
    Cookie 在網路系統中幾乎無處不在,當我們瀏覽以前登陸過的網站時,網頁中可能會出現 : XXX(你的使用者名稱),點進去就可以訪問自己的個人資訊頁。這其實是通過訪問主機中的一個檔案來實現的,這個檔案就是 Cookie。在 Internet 中,Cookie 實際上是指小量資訊,是由 Web 伺服器建立的,將資訊儲存在使用者計算機上的檔案。一般網路使用者習慣用其複數形式 Cookies,指某些網站為了辨別使用者身份、進行 Session 跟蹤而儲存在使用者本地終端上的資料,而這些資料通常會經過加密處理 。

    alt1
  • Session
    Session是另一種記錄客戶狀態的機制,不同的是Cookie儲存在客戶端瀏覽器中,而Session儲存在伺服器上。

二者的機制

  • cookie機制:
    正統的cookie分發是通過擴充套件HTTP協議來實現的,伺服器通過在HTTP的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。然而純粹的客戶端指令碼如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由瀏覽器按照一定的原則在後臺自動傳送給伺服器的。瀏覽器檢查所有儲存的cookie,如果某個cookie所宣告的作用範圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上傳送給伺服器。
    cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用範圍。若不設定過期時間

    ,瀏覽器會把cookie儲存到記憶體裡,關閉瀏覽器視窗,cookie就消失。若設定了過期時間,瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie仍然有效直到超過設定的過期時間。儲存在硬碟上的cookie可以在不同的瀏覽器程序間共享,比如兩個IE視窗。而對於儲存在記憶體裡的cookie,不同的瀏覽器有不同的處理方式。

  • sesion機制:
    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是存在伺服器端上。
機制上看:cookie是當瀏覽器請求同一個網站時,瀏覽器把請求的網址連同該cookie一同提交給伺服器,然後伺服器檢查該cookie,以此來辨認使用者狀態;session是伺服器通過查詢id來讀資訊的,就像通過鍵(key)來找對應的鍵值(value).
安全性上看:cookie一般儲存了使用者的賬號密碼等私人資訊,可能會被跨站點指令碼攻擊,從而被竊取到資訊(當然可以使用者手動關閉瀏覽器的cookie以避免此問題);session是存在伺服器的,相對來說更安全。



結束


  1. 圖片轉自:https://www.cnblogs.com/andy-zhou/p/5360107.html#_caption_5 ↩︎