Cookie與Session的一些總結

2022-05-01 22:00:16 字數 3001 閱讀 5399

一、cookie:

cookie主要儲存一些不敏感的資料,只能儲存字串型別

執行過程:

(1)第一次請求:

客戶端將資料(比如使用者名稱)以請求報文的形式請求伺服器端響應,

伺服器端得到資料(使用者名稱),

如果登入成功則用cookie儲存在客戶端上,cookie建立並賦值如下:

鍵","值"

);response.cookies.add(cookie);

也可以通過瀏覽器發過來的請求報文來獲得cookie物件:

(2)第二次請求:

這樣就可以滿足需求,當使用者再次請求頁面時,就可以對使用者cookie的判斷,

來預先填充一些資料。

cookie的取值**如下:

request.cookies["

鍵"].value.tostring();

cookie 可以設定過期的時間(設定cookie為硬碟cookie):

cookie.expires = datetime.now.addhours(1);

判斷cookie是否存在(判斷獲得的cookie物件是否為空)

if(request.cookie["

鍵"]==null)

二、session:

要實現session功能,必須實現system.web.sessionstate.irequiressessionstate 標記介面

session的存在也是為了免去使用者重複性的去輸入一些資料,

不同的是session可以儲存一些資料敏感的資料(pwd,密碼),可以是任意型別的,

這樣就可以實現免登陸(使用者登入一次之後,如果不退出瀏覽器,第二次可直接進入主頁),

執行過程:

(1)第一次請求

瀏覽器將資料通過請求報文的形式,請求伺服器端響應,

伺服器判斷使用者名稱密碼是否正確,

正確之後,用session儲存資料,**如下:

存值,session是以鍵值對形式儲存的:

context.session["

鍵"]="

值";

這一步是伺服器端自動完成的,伺服器會把session存到session池中,

session池中物件的鍵(asp.net_sessionid)是隨機生成的,

session池中的值就是剛才儲存的session鍵值對,context.session["pwd"],

將asp.net_sessionid以cookie形式返回,返回的cookie是以快取儲存在瀏覽器端,

(2)第二次請求

在第一次請求後,瀏覽器已經獲得了乙個asp.net_sessionid,

在第二次請求時,會將asp.net_sessionid帶到請求報文頭中,

這樣在執行aspx頁面的管道事件的第9到第11個事件時,根據asp.net_sessionid

找到session池中對應的session物件,並將這個物件賦值給上下文物件context中。

session的取值**如下:

context.session["

鍵"].tostring();

將session清除的**如下:

context.session.abandon();

判斷session是否存在session(判斷獲得的session物件是否為空)

if(context.session["

鍵"]==null)

三、可以使用cookie與session的組合來一些功能

(1)需求:使用者登入一次頁面成功之後,以後再登入其他頁面時可以不用通過登入頁面,

前提是只要不退出瀏覽器,一旦退出瀏覽器,使用者需重新通過登入頁面

這是通過session來實現

登入成功後將查詢到的使用者名稱存到session中:

context.session["

鍵"]="

值";

以後每個頁面首先判斷session是否存在:

if(context.session["

鍵"]==null)

(2)需求:實現使用者的7天免登入,

這是通過session 與cookie組合完成的

登入成功後將查詢到的使用者名稱存到session中:

context.session["

鍵"]="

值";

如果使用者選擇了免登入,因為cookie不能儲存使用者敏感資料,

用cookie記錄當前使用者的id,並設定過期時間為7天,

鍵","值"

);cookie.expires = datetime.now.adddays(7

);response.cookies.add(cookie);

以後在判斷完session是否存在後,再判斷使用者 id的cookie是否存在,

如果cookie存在,則取出id,並在資料庫中查詢使用者名稱賦值給session,

stringid= request.cookies["鍵"

].value.tostring();

然後查詢出使用者名稱,

context.session["鍵

"] = "

使用者名稱";

(3)需求:登入成功之後,在每個頁面上顯示使用者名稱

通過session實現

在aspx前台頁面上如下**:

<%= session["

鍵"] %>

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中如果...