cookie與session的關聯

2021-05-22 23:29:12 字數 1082 閱讀 4631

前提:cookie沒有被禁用。

當用瀏覽器登入到某**伺服器時,先找對應的cookie檔案,當首次訪問是當然沒有cookie檔案,所以在請求頭部中沒有cookie的內容,即在請求頭部中沒有類似cookie: jsessionid=***************的內容,這時當請求到達伺服器後,伺服器看請求頭中沒有jsessionid值,於是生成乙個session物件,並由某種演算法產生乙個值賦給這個session的id,並將sessionid,和session物件放入hashmap中,然後將這個sessionid發回以客戶端,即在響應的頭部有一行:set-cookie:jsessionid=************xx,瀏覽器解析後會將在jsessionid和值記錄到cookie中。

如果使用者登入,我們會在程式中將一些值放入session中,如request.getsession().setattribute("username","***x"),下次就可根據這個值是否為空來斷斷使用者是否已登入。

當用瀏覽器再次請求此**的另一頁麵時,瀏覽器檢查看有沒有cookie,這時有cookie(前提是cookie沒有過期),會自動的把cookie的內容附加到請求頭中,即在請求頭附加了一行:cookie: jsessionid=*********************xx,伺服器接收到請求後會根據jsessionid的值知道sessionid的值,在tomcat中兩個值是一樣的,然後你可根據這個sessionid找到對應的session,可由session中登入後設定的某些值是否為空,來判斷此使用者是否登入。

當使用者安全登出後(呼叫session.invalidate()),伺服器會將session銷毀,並生成乙個新的jsessionid發回用客戶端,瀏覽器接收響應後,會將cookie中的jsessionid換成新值,當使用者再次訪問此伺服器時,會在請求中自動的加入新的jsessionid的值發到伺服器,這時伺服器根據jsessionid找不對應的session了,因此就可知道是一次新的會話,伺服器會生成乙個session物件,並將客戶端發過來的jsession的值賦給這個session的id。

這時如果想再訪問安全登出之前的頁面,因為沒有登入,所有session.getattribute("username")的值為空,

因此可判斷使用者沒有登入。

session與cookie的區別

讓我們用幾個例子來描述一下cookie和session機制之間的區別與聯絡。筆者曾經常去的一家咖啡店有喝5杯咖啡免費贈一杯咖啡的優惠,然而一次性消費5杯咖啡的機會微乎其微,這時就需要某種方式來紀錄某位顧客的消費數量。想象一下其實也無外乎下面的幾種方案 1 該店的店員很厲害,能記住每位顧客的消費數量,...

session與cookie的區別

1 session儲存在伺服器,客戶端不知道其中的資訊 cookie儲存在客戶端,伺服器能夠知道其中的資訊。2 session中儲存的是物件,cookie中儲存的是字串。3 session不能區分路徑,同乙個使用者在訪問乙個 期間,所有的session在任何乙個地方都可以訪問到。而cookie中如果...

session與cookie的區別

1 session儲存在伺服器,客戶端不知道其中的資訊 cookie儲存在客戶端,伺服器能夠知道其中的資訊。2 session中儲存的是物件,cookie中儲存的是字串。3 session不能區分路徑,同乙個使用者在訪問乙個 期間,所有的session在任何乙個地方都可以訪問到。而cookie中如果...