整理 cookie和session機制

2021-09-24 21:45:35 字數 1699 閱讀 6592

由於http本身是無狀態的,無法記錄使用者標識身份,需要採用一些方案來儲存身份驗證,cookie 機制採用的是在客戶端保持狀態的方案,而 session 機制採用的是在伺服器端保持狀態的方案。

cookie 的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成 cookie的作用範圍。若不設定過期時間,則表示這個 cookie 的生命期為瀏覽器會話期間,關閉瀏覽器視窗,cookie 就消失。這種生命期為瀏覽器會話期的 cookie 被稱為會話 cookie。會話 cookie 一般不儲存在硬碟上而是儲存在記憶體裡,當然這種行為並不是規範規定的。若設定了過期時間,瀏覽器就會把 cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些 cookie仍然有效直到超過設定的過期時間,儲存在硬碟上的 cookie 可以在不同的瀏覽器程序間共享。

cookie 機制。正統的 cookie 分發是通過擴充套件 http 協議來實現的,伺服器通過在 http的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的 cookie。

而 cookie 的使用是由瀏覽器按照一定的原則在後台自動傳送給伺服器的。瀏覽器檢查所有儲存的 cookie,如果某個 cookie 所宣告的作用範圍大於等於將要請求的資源所在的位置,則把該 cookie 附在請求資源的 http請求頭上傳送給伺服器。

由於採用伺服器端保持狀態的方案在客戶端也需要儲存乙個標識,伺服器端的標識就是session,所以 session 機制可以借助於 cookie 機制來達到儲存標識的目的,但實際上它還有其他選擇。

具體來說,session 機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表的結構來儲存資訊。當程式需要為某個客戶端的請求建立乙個 session 時,伺服器首先檢查這個客戶端的請求裡是否已包含了乙個 session 標識(稱為 session id),如果已包含則說明以前已經為此客戶端建立過 session,伺服器就按照 session id 把這個 session 檢索出來使用(檢索不到,會新建乙個),如果客戶端請求不包含 session id,則為此客戶端建立乙個 session 並且生成乙個與此 session 相關聯的 session id,session id 的值應該是乙個既不會重複,又不容易被找到規律以仿造的字串,這個 session id 將被在本次響應中返回給客戶端儲存。儲存這個 session id 的方式可以採用 cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識傳送給伺服器。

但 cookie 可以被人為的禁止,必須有其他機制以便在 cookie 被禁止時仍然能夠把 session id 傳遞歸伺服器。

經常被使用的一種技術叫做 url 重寫,就是把 session id 直接附加在 url 路徑後面。

還有一種技術叫做表單隱藏字段。就是伺服器會自動修改表單,新增乙個隱藏字段,以便在表單提交時能夠把 session id 傳遞歸伺服器,type=hidden。

cookie 資料存放在客戶的瀏覽器上,session 資料放在伺服器上。

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

session 會在一定時間內儲存在伺服器上。當訪問增多,會比較占用你伺服器的效能,考慮到減輕伺服器效能方面,應當使用 cookie。

單個 cookie 儲存的資料不能超過 4k,很多瀏覽器都限制乙個站點最多儲存 20 個

cookie。

建議是:

將登陸資訊等重要資訊存放為 session。

其他資訊如果需要保留,可以放在 cookie 中。

Python中cookie和session的異同點

cookie和session的異同點 共同點 1.cookie和session都是用來儲存資料的 2.cookie和session都可以設定有效時間 不同點 1.cookie是儲存在瀏覽器客戶端,session是儲存在服務端 2.session相對cookie來說更更安全 3.session依賴於c...

Flask中的cookie和session淺知

cookie技術的必要性 cookie的實現原理 cookie時用來將使用者資訊儲存在客戶端的技術,使用者資訊會被存放於客戶端的計算機中。cookie儲存到客戶端之後,當使用者再次通過瀏覽器發起對伺服器的請求的時候,瀏覽器就會自動帶著此 相關的cookie資訊來請求資料庫。而cookie資訊裡面儲存...

HTTP協議之Cookie和Session

http是無狀態協議,那麼服務端如何識別特定的客戶端呢?注 無狀態指http協議自身不對請求和響應之間的通訊狀態進行儲存。對傳送過的請求和響應都不做持久化處理 即不做任何儲存 每次http請求的時候,客戶端都會傳送相應的cookie資訊到服務端。實際上大多數的應用都是用cookie來實現sessio...