通常我們所說的瀏覽器自動儲存密碼,下次不用登陸,提示一次就不再出現的內容,大部分通過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序列化後儲存起來的,這樣的好處是沒了時間的限制,壞處是隨著時間的增加,這個資料 庫會急速膨脹,特別是訪問量增加的時候。一般還是採取前一種方式,以減輕伺服器壓力。
session的客戶端實現形式(即session id的儲存方法)
一般瀏覽器提供了兩種方式來儲存,還有一種是程式設計師使用html隱藏域的方式自定義實現:
1使用cookie來儲存,這是最常見的方法,本文「記住我的登入狀態」功能的實現正式基於這種方式的。伺服器通過設定cookie的方式將session id傳送到瀏覽器。如果我們不設定這個過期時間,那麼這個cookie將不存放在硬碟上,當瀏覽器關閉的時候,cookie就消失了,這個session id就丟失了。如果我們設定這個時間為若干天之後,那麼這個cookie會儲存在客戶端硬碟中,即使瀏覽器關閉,這個值仍然存在,下次訪問相應**時,同 樣會傳送到伺服器上。view code2 使用url附加資訊的方式,也就是像我們經常看到jsp**會有aaa.jsp?jsessionid=*一樣的。這種方式和第一種方式裡面不設定cookie過期時間是一樣的。
3 第三種方式是在頁面表單裡面增加隱藏域,這種方式實際上和第二種方式一樣,只不過前者通過get方式傳送資料,後者使用post方式傳送資料。但是明顯後者比較麻煩。
cookie與session的區別:
1.cookie資料儲存在客戶端,session資料儲存在伺服器端。
2.session相比於cookie較更安全一點,可以通過存放在本地的cookie分析偽造出cookie
3.session是存放在伺服器端,當訪問增多,會相比於cookie較占用伺服器的效能
cookie和session的聯絡:
當程式需要為某個客戶端的請求建立乙個session時,伺服器首先檢查這個客戶端的請求裡是 否已包含了乙個session標識(稱為session id),如果已包含則說明以前已經為此客戶端建立過session,伺服器就按照session id把這個session檢索出來使用(檢索不到,會新建乙個),如果客戶端請求不包含session id,則為此客戶端建立乙個session並且生成乙個與此session相關聯的session id,session id的值應該是乙個既不會重複,又不容易被找到規律以仿造的字串,這個session id將被在本次響應中返回給客戶端儲存。
儲存這個session id的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動的按照規則把這個標識發揮給伺服器。一般這個cookie的名字都是類似於seeesionid。但cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞歸伺服器。
cookie與session的關聯
前提 cookie沒有被禁用。當用瀏覽器登入到某 伺服器時,先找對應的cookie檔案,當首次訪問是當然沒有cookie檔案,所以在請求頭部中沒有cookie的內容,即在請求頭部中沒有類似cookie jsessionid 的內容,這時當請求到達伺服器後,伺服器看請求頭中沒有jsessionid值,...
session與cookie的區別
讓我們用幾個例子來描述一下cookie和session機制之間的區別與聯絡。筆者曾經常去的一家咖啡店有喝5杯咖啡免費贈一杯咖啡的優惠,然而一次性消費5杯咖啡的機會微乎其微,這時就需要某種方式來紀錄某位顧客的消費數量。想象一下其實也無外乎下面的幾種方案 1 該店的店員很厲害,能記住每位顧客的消費數量,...
session與cookie的區別
1 session儲存在伺服器,客戶端不知道其中的資訊 cookie儲存在客戶端,伺服器能夠知道其中的資訊。2 session中儲存的是物件,cookie中儲存的是字串。3 session不能區分路徑,同乙個使用者在訪問乙個 期間,所有的session在任何乙個地方都可以訪問到。而cookie中如果...