Cookie與Session小記

一 Cookie的作用

     我們知道,HTTP協議是一種無狀態的通信,就是說,使用HTTP請求是無法保證連續訪問的。瀏覽器每請求一次WEB服務器,WEB服務器都認爲這是一次新的請求,它並不知道該瀏覽器前一次也訪問過。例如網上購物我們瀏覽商品,我到一個頁面買了一件商品,又到另外一個頁面買了商品,那前一次訪問的頁面的商品就沒有了?這是不合理的。

   COOKIE是一種可以解決上述問題的方法,當服務器覺得有必要記錄你的狀態的時候,它就會保存COOKIE;當瀏覽器訪問WEB服務器時,它會把COOKIE發送給服務器,這樣WEB服務器就知道曾經瀏覽器來過。

 

二 Cookie的具體形態

     COOKIE是以文本文件的方式保存在客戶端的,不能是其他格式,例如將一個對象序列化成文件來保存是不行的。另外,COOKIE是明文的,流氓軟件、黑客等等都可以竊取COOKIE信息,所以在保存相對重要的信息時最好進行加密。比如我們實現個性化首頁定製、購物網站最近瀏覽過的商品等功能,都可以通過COOKIE來實現。

三 HttpServletRequest#getCookies()方法研究

四 關於Session

   COOKIE不同,SESSION是記錄在服務器的內存當中的,這樣用戶就無法直接篡改服務器信息,而COOKIE存在客戶端。SESSION以對象的形式來進行保存,因此SESSION保存的對象必須能夠序列化。SESSION可以完成連續性信息的記錄,比如實現用戶登錄權限等。

  SESSION究竟是怎樣實現的?其底層實現方式有兩種,URL重寫和COOKIE實現。

  (1)URL重寫。
  Web Server在返回Response的時候,檢查頁面中所有的URL,包括所有的連接,和HTML Form的Action屬性,在這些URL後面加上“;jsessionid=XXX”。下一次,用戶訪問這個頁面中的URL,jsessionid就會傳回到Web Server。
  (2)Cookie。
  如果客戶端支持Cookie,Web Server在返回Response的時候,在Response的Header部分,加入一個“set-cookie: jsessionid=XXXX”header屬性,把jsessionid放在Cookie裏傳到客戶端。 客戶端會把Cookie存放在本地文件裏,下一次訪問Web Server的時候,再把Cookie的信息放到HTTP Request的“Cookie”header屬性裏面,這樣jsessionid就隨着HTTP Request返回給Web Server。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章