cookie 與session的區別

由於HTTP協議是無狀態的,在WEB系統中,怎麼識別請求來自於哪裡呢?是哪一個用戶發起的請求呢?

為了解決這一個問題,HTTP協議引入了cookie和session這兩個 概念。

cookie是什麼呢?

cookie是服務器傳遞到瀏覽器,保存在瀏覽器中的數據,然後瀏覽器每次請求都帶上cookie,這樣就可以標識用哪一個用戶發起的請求, 比如說把用戶登錄的用戶名和密碼保存在cookie中, 只要cookie沒有過期,以後用戶每次登錄都可以自動登錄了,不需要再次輸入用戶名和密碼, 因為瀏覽器在發起請求的時候已經把cookie中的用戶名和密碼傳遞給服務器了。

測試人員肯定經常聽到開發對你說,我這邊都是可以的,你清理一下你的瀏覽器的緩存,肯定就可以了,結果。。。有時候還是不行

cookie 與session的區別

session是什麼呢?

session把用戶的信息保存在服務器上面, 瀏覽器第一次訪問的時候服務器把sessionID傳遞到瀏覽器,然後瀏覽器把Session_id保存在cookie中, 每次訪問把session_id帶上,服務器就可以標識這個請求來自於那個用戶,然後根據session_id查這個這個用戶的seesion裡面記錄了哪些數據。

會話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的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。一般這個cookie的名字都是類似於SEEESIONID。但cookie可以被人為的禁止,所以必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞迴服務器。其中一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面。還有一種技術叫做表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞迴服務器。

cookie 和session 的比較:

(1)都是為了用來記錄用戶狀態。

(2)cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

(3)cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙。

(4)session會在一定時間內保存在服務器上。當訪問增多,對服務器產生較大壓力。

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

(6)所以一般做法是:將登錄信息等重要信息存放為session,其他需要保留的信息放在cookie中。

覺得文章不錯的話就點贊吧,轉發就更好了,記得關注我們哦


分享到:


相關文章: