計算機網路 Cookie和Session

2022-09-18 19:45:10 字數 4037 閱讀 3294

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會儲存在客戶端硬碟中,即使瀏覽器關閉,這個值仍然存在,下次訪問相應**時,同

樣會傳送到伺服器上。

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

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

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

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

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

到目前為止,已經基本明確了「記住我的登入狀態」的實現方式和理論依據,後文將使用jsp和php兩種web開發技術來具體實現這個功能。

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會儲存在客戶端硬碟中,即使瀏覽器關閉,這個值仍然存在,下次訪問相應**時,同

樣會傳送到伺服器上。

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

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

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

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

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

到目前為止,已經基本明確了「記住我的登入狀態」的實現方式和理論依據,後文將使用jsp和php兩種web開發技術來具體實現這個功能。

計算機網路 session和cookie的區別

具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於才伺服器端保持狀態的方案在客戶端也需要儲存乙個標識,所以session機制可能需要借助於cookie機制來達到儲存標識的目的,但實際上還有其他選擇。如果不設定過期時間,則...

計算機網路9 計算機網路效能

1.網路效能的衡量指標 2.速率 3.頻寬 4.延遲 5.丟包率 6.時延頻寬積 7.吞吐率 網路效能的好壞可以由網路的速率 頻寬 延遲 丟包率 網路頻寬積 吞吐率等方面來判斷,下面讓我們一一詳細介紹。速率 資料率 data rate 也稱 資料傳輸速率或位元率 bit rate 指的是 單位時間 ...

計算機網路 計算機網路的效能

目錄 1.網路效能的衡量指標 2.速率 3.頻寬 4.延遲 5.丟包率 6.時延頻寬積 7.吞吐率 網路效能的好壞可以由網路的速率 頻寬 延遲 丟包率 網路頻寬積 吞吐率等方面來判斷,下面讓我們一一詳細介紹。速率 資料率 data rate 也稱 資料傳輸速率或位元率 bit rate 指的是 單位...