一、session與cookie的區別
session:Session 是存放在服務器端的,類似於Session結構來存放用戶數據,當瀏覽器 第一次發送請求時,服務器自動生成了一個Session和一個Session ID用來唯一標識這個Session,並將其通過響應發送到瀏覽器。當瀏覽器第二次發送請求,會將前一次服務器響應中的Session ID放在請求中一並發送到服務器上,服務器從請求中提取出Session ID,並和保存的所有Session ID進行對比,找到這個用戶對應的Session。由於Session存放在服務器端,所以隨着時間的推移或者用戶訪問的增多,會給服務器增加負擔。使用的時候要考慮下服務器的性能。
cookie:Cookie實際上是一小段的文本信息。客戶端請求服務器,如果服務器需要記錄該用戶狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端會把Cookie保存起來。由於Cookie是存放在客戶端,是可見的,安全性就會很低。因此不建議將一些重要的信息放在cookie中。
區別:
- cookie存放在客戶端,session存放在服務器端
- cookie不是很安全,別人可以分析你本地的cookie信息進行cookie欺騙,因此重要信息應考慮保存在服務器端
- session一定時間內回報存在服務器端,當訪問量增大時,會影響服務器性能,從性能方面考慮應使用cookie
- 不同瀏覽器對cookie的數據大小限制不同,個數限制也不同
- 可以考慮將登陸信息等重要信息存放為session,不重要的信息可以放在cookie中
聯系:
- 都是用來記錄用戶的信息,以便讓服務器分辨不同的用戶
- 可以搭配使用,但都有自己的使用局限,要考慮到安全和性能的問題
二、如果客戶端禁止 cookie,session 還能用嗎?
如果瀏覽器禁止cookie,那么客戶端訪問服務端時無法攜帶sessionid,服務端無法識別用戶身份,便無法進行會話控制,session失效。但可以通過以下幾種方法:
- URL重寫:URL重寫要求將站點中的所有超鏈接都進行改造,在超鏈接后用一個特殊的參數JSESSIONID保存當前瀏覽器對應session的編號,這樣一來,當用戶點擊超鏈接訪問服務器時,服務器可以從URL后的參數中分析出JSESSIONID,從而找到對應的sesison使用.
- 用文件、數據庫等形式保存Session ID,在跨頁過程中手動調用