天天看點

java實作三天免登陸_Cookie、Sesssion詳解(Cookie和Session實作免登陸)

java實作三天免登陸_Cookie、Sesssion詳解(Cookie和Session實作免登陸)
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的差別:

cookiesession存儲位置浏覽器伺服器浏覽器攜帶的資料量多少(隻攜帶session-id)存儲的資料類型隻能是字元串任意類型安全性較低較高預設的有效路徑目前目錄及其子目錄整站有效資料的傳輸量有限制4K,不能超過20個無限制

一些網站的3天免登陸是如何做到的?

方式一:首先想到的是使用cookie儲存使用者登入資訊,設定有效期,在使用者下次通路時免去登入環節,直接通過cookie擷取使用者資訊。

方式二:直接将session會話儲存,使用者下次通路時,繼續使用這個session。

相比之下session顯得更加安全,但是,大家知道,session會随着浏覽器的關閉而消失(确切的說,是在用戶端消失,伺服器端的session存活周期取決于相應配置),當使用者下次啟動浏覽器,通路網站時,又會得到由網站自動配置設定的新的session。那麼,問題來了:

如何做到關閉浏覽器後到下次登入時session仍然有效?

思路:

1、在使用者登入成功時,建立session對象,儲存使用者資訊

2、将此session的sessionid儲存到cookie中

java實作三天免登陸_Cookie、Sesssion詳解(Cookie和Session實作免登陸)

3、同時将sessionid于session對應關系存儲到應用域中,以便後面可以根據sessionid來擷取到session

4、在使用者關閉浏覽器,重新打開浏覽器通路網站時,讀取使用者的cookie,得到sessionid

java實作三天免登陸_Cookie、Sesssion詳解(Cookie和Session實作免登陸)

5、根據sessionid擷取到第3步存儲到應用域中的session對象

6、從session中讀取使用者資訊