session cookie與「記住我的登入狀

2021-06-18 19:25:28 字數 2085 閱讀 5493

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序列化後儲存起來的,這樣的好處是沒了時間的限制,壞處是隨著時間的增加,這個資料庫會急速膨脹,特別是訪問量增加的時候。一般還是採取前一種方式,以減輕伺服器壓力。

session的客戶端實現形式(即session id的儲存方法)

一般瀏覽器提供了兩種方式來儲存,還有一種是程式設計師使用html隱藏域的方式自定義實現:

[1] 使用cookie來儲存,這是最常見的方法,本文「記住我的登入狀態」功能的實現正式基於這種方式的。伺服器通過設定cookie的方式將session id傳送到瀏覽器。如果我們不設定這個過期時間,那麼這個cookie將不存放在硬碟上,當瀏覽器關閉的時候,cookie就消失了,這個session id就丟失了。如果我們設定這個時間為若干天之後,那麼這個cookie會儲存在客戶端硬碟中,即使瀏覽器關閉,這個值仍然存在,下次訪問相應**時,同樣會傳送到伺服器上。

[2] 使用url附加資訊的方式,也就是像我們經常看到jsp**會有aaa.jsp?jsessionid=*一樣的。這種方式和第一種方式裡面不設定cookie過期時間是一樣的。

[3] 第三種方式是在頁面表單裡面增加隱藏域,這種方式實際上和第二種方式一樣,只不過前者通過get方式傳送資料,後者使用post方式傳送資料。但是明顯後者比較麻煩。

實現「記住我的登入狀態」的功能

前面我們了解到,如果我們將session id通過cookie傳送到客戶端的時候設定其過期時間為1年,那麼在今後的一年時間內,客戶端訪問我的**的時候都回將這個session id值傳送到伺服器上,伺服器根據這個session id從記憶體或者資料庫裡面恢復存放key-value對的hashtable。

其實這已經很好的實現了我們的功能了。但是,前面也提到了,實際上session並不會一直都存在的,過了一定的時間之後,伺服器上的session就被銷毀了,以減輕伺服器的訪問壓力。當伺服器上的資料被銷毀後,即使客戶端上存放了cookie也沒有辦法「記住我的登入狀態」了。

通用的實現辦法是,將使用者的使用者名稱和加密之後的密碼也通過cookie的方式存放在客戶端,當伺服器上的session銷毀以後,使用cookie裡面存放的使用者名稱和加密之後的密碼重新執行一次登入操作,重建session,並更新客戶端上cookie中存放的的session id,而這個操作是發生在使用者請求乙個需要身份驗證的頁面資源的背後,對於使用者來講是透明的,於是就達到了「記住我的登入狀態」的目的了。

會話技術 session cookie

定義 會話跟蹤是web程式中常用的技術,用來跟蹤使用者的整個會話,乙個使用者的所有請求操作都應屬於同乙個會話 常用的會話跟蹤技術是cookie與session。解決問題 用於解決身份識別問題 cookie 通過在客戶端 記錄資訊確定使用者身份,session 通過在伺服器端 記錄資訊確定使用者身份。...

Session Cookie相關知識

session,cookie是b s中最常見的元素,除了只支援wap1.0的手機,部分不支援cookie,因此session客戶端也一般存到url上,或者客戶端禁止cookie,但現在一般不手工禁止cookie。下面對它們的區別做個簡單的介紹,這裡涉及具體配置就用.net環境下的配置介紹,不同語言思...

Session Cookie簡單理解

session session是一種記錄客戶狀態的機制,session是儲存在伺服器上的,當瀏覽器訪問伺服器的時候,伺服器把客戶端資訊以某種形式記錄在伺服器上,這就是所謂的session,當瀏覽器再次訪問的時候從該session中查詢客戶的狀態就可以了。看到乙個很經典的描述session的話 ses...