Cookie的機制
Cookie是瀏覽器(User Agent)訪問一些網站後,這些網站存放在客戶端的一組數據,用於使網站等跟蹤用戶,實現用戶自定義功能。
Cookie的Domain和Path屬性標識了這個Cookie是哪個網站發送給瀏覽器的;Cookie的Expires屬性標識了Cookie的有 效時間,當Cookie的有效時間過了以後,這些數據就被自動刪除了。
若是不設置過時時間,則表示這個Cookie生命週期爲瀏覽器會話期間,只要關閉瀏覽器窗口,Cookie就消失了。這種生命期爲瀏覽會話期的 Cookie被稱爲會話Cookie。會話Cookie通常不保存在硬盤上而是保存在內存裏。若是設置了過時時間,瀏覽器就會把Cookie保存到硬盤 上,關閉後再次打開瀏覽器,這些Cookie依然有效直到超過設定的過時時間。存儲在硬盤上的Cookie能夠在不一樣的瀏覽器進程間共享,好比兩個IE窗 口。而對於保存在內存的Cookie,不一樣的瀏覽器有不一樣的處理方式。
Session的機制
Session是存放在服務器端的相似於HashTable結構(每一種Web開發技術的實現可能不同,下文直接稱之爲HashTable)來存放用戶 數據,當瀏覽器第一次發送請求時,服務器自動生成了一個HashTable和一個Session ID用來惟一標識這個HashTable,並將其經過響應發送到瀏覽器。當瀏覽器第二次發送請求,會將前一次服務器響應中的Session ID放在請求中一併發送到服務器上,服務器從請求中提取出Session ID,並和保存的全部Session ID進行對比,找到這個用戶對應的HashTable。
通常狀況下,服務器會在必定時間內(默認20分鐘)保存這個HashTable,過了時間限制,就會銷燬這個HashTable。在銷燬以前,程序員能夠 將用戶的一些數據以Key和Value的形式暫時存放在這個HashTable中。固然,也有使用數據庫將這個HashTable序列化後保存起來的,這 樣的好處是沒了時間的限制,壞處是隨着時間的增長,這個數據庫會急速膨脹,特別是訪問量增長的時候。通常仍是採起前一種方式,以減輕服務器壓力。
cookie和session的區別:
cookie
session
存儲位置
瀏覽器
服務器
瀏覽器攜帶的數據量
多
少(只攜帶session-id)
存儲的數據類型
只能是字符串
任意類型
安全性
較低
較高
默認的有效路徑
當前目錄及其子目錄
整站有效
數據的傳輸量
有限制4K,不能超過20個
無限制
一些網站的3天免登錄是如何作到的?
方式一:首先想到的是使用cookie保存用戶登陸信息,設置有效期,在用戶下次訪問時免去登陸環節,直接經過cookie獲取用戶信息。
方式二:直接將session會話保存,用戶下次訪問時,繼續使用這個session。
相比之下session顯得更加安全,可是,你們知道,session會隨着瀏覽器的關閉而消失(確切的說,是在客戶端消失,服務器端的session存活週期取決於相應配置),當用戶下次啓動瀏覽器,訪問網站時,又會獲得由網站自動分配的新的session。那麼,問題來了:
如何作到關閉瀏覽器後到下次登陸時session仍然有效?
思路:
一、在用戶登陸成功時,建立session對象,保存用戶信息
二、將此session的sessionid保存到cookie中
三、同時將sessionid於session對應關係存儲到應用域中,以便後面能夠根據sessionid來獲取到session
四、在用戶關閉瀏覽器,從新打開瀏覽器訪問網站時,讀取用戶的cookie,獲得sessionid
五、根據sessionid獲取到第3步存儲到應用域中的session對象
六、從session中讀取用戶信息
————————————————
版權聲明:本文爲CSDN博主「小骨格子屋」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/huihuikuaipao_/article/details/83022039程序員