session
session:是在服務(wù)器端狀態(tài)保持機制,提供了一種把信息保存在服務(wù)器內(nèi)存中的一種方法,它能存儲任何數(shù)據(jù)類型,包括用戶自定義的數(shù)據(jù)類型。
每個客戶端的session是獨立存儲的,每個session對象用于存儲對應(yīng)用戶的信息,用戶不能訪問和修改其他用戶的session。在服務(wù)器端有一個session池,用來存儲每個用戶的session信息。為了區(qū)別,給每個session對象增加一個sessionID,而且這個sessionID是唯一的,然后返回給瀏覽器。用戶下次訪問時,帶著這個sessionID,從session池中找到對應(yīng)的session對象。每個用戶都有自己的一個session對象,不能對其他用戶的session對象進行操作。
sessionID是以cookie的形式返回給瀏覽器端,瀏覽器將接收到的存儲sessionID的cookie保存在內(nèi)存中(瀏覽器端)
session不能跨進程使用(不能跨瀏覽器使用)
當調(diào)用session的abandon方法時,強制性關(guān)閉,如注銷
session.Abandon();//銷毀服務(wù)端的session對象
session.Clear();//清除session中鍵值對
cookie
cookie:是一個在客戶端狀態(tài)保持的文本文件,是一種能夠讓網(wǎng)站服務(wù)端把少量數(shù)據(jù)保存在客戶端(瀏覽器)的內(nèi)存或者硬盤,并且能夠讀取出來的一種技術(shù)。
cookie是由服務(wù)端生成,發(fā)送給user-Agent(一般是瀏覽器,以下以瀏覽器來說),瀏覽器會將cookie中的key-value鍵值對寫入到某個目錄下的文本文件內(nèi)。下次請求同一網(wǎng)站時就發(fā)送該cookie給服務(wù)器(前提是瀏覽器設(shè)置為啟用cookie)。cookie的鍵和值可以由服務(wù)端開發(fā)自己定義。這樣服務(wù)器就知道訪問用戶是否是合法用戶,以及用戶是否已經(jīng)登錄過。
服務(wù)器可以利用cookie包含信息的任意性來篩選并維護這些信息。
cookie最典型的應(yīng)用是判斷用戶是否登錄網(wǎng)站,用戶可能得到提示:是否記住用戶名密碼以便在下次訪問該網(wǎng)址時不用輸入用戶名密碼而可以直接登錄。這就是cookie的功勞。另一個重要的應(yīng)用場景就是購物車之類的場景:用戶可能在一段時間內(nèi)在同一家網(wǎng)站的不同頁面選擇不同商品,這些信息都會被寫入cookies,以便在最后付款時提取信息。
瀏覽器會自動將屬于該網(wǎng)站的cookie文件發(fā)送給該網(wǎng)站服務(wù)端。通過域名來區(qū)分cookie文件。域名和cookie文件有一一映射的關(guān)系。
cookie的缺點:不能存儲過多的信息。
cookie和session的生存周期(以20分鐘為例)的區(qū)別:
(1)cookie的生命周期是累計的,從創(chuàng)建時,就開始計時,20分鐘后,cookie生命周期結(jié)束,
(2)session的生命周期是間隔的,從創(chuàng)建時,開始計時如在20分鐘,沒有訪問session,那么session生命周期被銷毀
但是,如果在20分鐘內(nèi)(如在第19分鐘時)訪問過session,那么,將重新計算session的生命周期
(3)關(guān)機會造成session生命周期的結(jié)束,但是對cookie沒有影響