天天看點

JavaEE——Session與Cookie的差別和聯系CookieSession

Cookie

cookie是用戶端在通路web伺服器時,伺服器在用戶端的機器上存放的資訊。 伺服器将Cookie儲存在客戶機器上的原因是為了跟蹤客戶的狀态。這主要用于特殊的場合如電子商務。JavaServletApi為Cookie提供了簡單實作,javax.servlet.http.Cookie類表示Cookie。 Cookie儲存用戶端的硬碟上,通過key和value值來儲存資訊,類似于Map。 Cookie的key和value 不能使用中文。如果要儲存中文,必須使進行編碼。

Session

會話(Session)是指在一段時間内,使用者使用同一個浏覽器程序與Web應用之間的互動過程。

會話(Session)通常用來跟蹤使用者的狀态,緩存使用者在此浏覽器程序中的資訊。

當使用者關閉浏覽器,上一個Session也就無法再次獲得了(Cookie的maxAge為-1的情況)。再次打開新的浏覽器,将開始一個新的會話。

伺服器給每個使用者建立一個會話,即HttpSession對象,儲存在伺服器端。

類javax.servlet.http.HttpSession。每一個HttpSession代表使用者的一個會話。

每一個Session的過期時間預設為30分鐘。

要想知道兩者的差別和聯系,就需要了解這兩者在用戶端通路浏覽器時的互動。

JavaEE——Session與Cookie的差別和聯系CookieSession

IE表示用戶端 當用戶端第一次請求伺服器時,伺服器就會給使用者配置設定一個唯一的會話辨別,即JESSIONID。然後以Cookie的形式傳回給使用者。使用者這邊就儲存了一個cookie。

下圖是一個響應頭:

JavaEE——Session與Cookie的差別和聯系CookieSession

而伺服器要跟用戶端保持對話,是以伺服器中儲存了一個相同JESSIONID的session。當浏覽器再次通路伺服器,

下圖是在浏覽器中随意點的一個連結。

  1. Accept: image/webp,image*;q=0.8
  2. Accept-Encoding: gzip, deflate, sdch
  3. Accept-Language: zh-CN,zh;q=0.8
  4. Connection: keep-alive
  5. Cookie: HMACCOUNT=3E8DE87F6357F592; BDUSS=o1SXlKa3drcnB3NTFBa3UwUH5WRFI1dHdJbU85NXBDbDc1VS1oY3YxOU9URnBZSVFBQUFBJCQAAAAAAAAAAAEAAABbiGlPZna57XZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE6~MlhOvzJYZG; BAIDUID=077E77CB5F46933F6FE7FF8E57D4984A:FG=1; PSTM=1486268148; BIDUPSID=F51A929DC89591AEF14F75E4089CF1B1; MCITY=-158%3A
  6. Host: hm.baidu.com
  7. Referer: http://blog.csdn.net/damenhanter/article/details/24771913
  8. User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36

可以看到,有一個Cookie屬性。因為已經不是第一次通路該伺服器,是以當浏覽器再次通路伺服器時,會攜帶包含了jsessionid的cookie通路伺服器。伺服器根據此id傳回此使用者的HttpSession對象,就保持了會話。

是以,我們可以知道Cookie是儲存在用戶端,Session是伺服器自己儲存。Session 狀态資訊儲存在伺服器端。這意味着安全性更高。

繼續閱讀