cookie和session

一:會話技術簡介web

  1. 存儲客戶端的狀態。例如:用戶在商城上面購物,服務端如何針對不一樣的客戶端進行信息的存儲呢?訪問的信息存放在哪裏?由於http協議是無狀態的,因此客戶端訪問服務器的時候服務器並不知道是哪一個客戶端,因此須要會話技術進行識別客戶端的裝態。說白了會話技術就是使服務器可以記住客戶端的狀態(區分客戶端)。
  2. 會話技術:瀏覽器打開訪問其中的某個站點,直到瀏覽器關閉的整個過程,稱爲一次會話。會話技術就是記錄客戶端在此次會話中的數據和狀態。會話技術分爲cookie和session,session和cookie的做用都是爲了保持客戶端和服務端的交互狀態。   
    •   cookie:將服務端返回的響應信息以key/value的方式存儲在客戶端。減小服務端的壓力,可是安全性很差,由於客戶端能夠刪除 cookie信息。並且客戶端存儲cookie的大小不能超過4k,一臺瀏覽器最多存儲50個cookie,低版本的可能存儲20個cookie。
    •   session:偏偏和cookie相反。session是將數據存儲在服務端,相對安全,可是增長了服務端的壓力。主要用在解決服務器之間共享的問題  

二:cookie技術瀏覽器

 cookie是將用戶的信息保存在客戶端的會話技術tomcat

  建立cookie的條件:安全

    • cookie的name值不能和set-cookie中的屬性值同樣
    • cookie的name值和value的值不能爲非Assic碼。若是cookie中存在中文,須要使用URLEncode進行編碼,不然程序運行會出現異常
    • cookie中的name和value的值出現Token字符(、, \ 等),會將cookie中的version設置爲1(cookie存在兩個版本,版本0,版本1)。    
  1.  服務端如何將cookie返回給客戶端?
    1. 建立cookie對象 :Cookie cookie = new Cookie(cookieName,cookieValue);cookie會以響應頭(set-cookie)的方式返回給客戶端

    2. 設置cookie的過時時間:cookie.setMaxAge(毫秒值): 注意:若是不設置cookie的持久化時間,cookie信息會保存在瀏覽器的內存中,若是瀏覽器關閉,cookie就銷燬(會話技術),若是設置過時時間,cookie信息會被持久化到瀏覽器磁盤文件中,直到cookie過時,cookie銷燬。

    3. 設置攜帶cookie的路徑:setPath("/"); 若是不設置攜帶cookie的路徑,那麼訪問建立cookie路徑下的全部資源都會攜帶cookie信息。例如:建立的cookie路徑是:/web應用/servlet1     ,那麼訪問 /web應用/servlet1 下的任何資源都會攜帶cookie

    4. 將建立的cookie發送給客戶端  ; response.addCookie(cookie);會在客戶端響應該cookie     

 圖解cookie的存儲過程服務器

 

      

 

 三:session技術cookie

  • 爲何會有session?     

  session出現的緣由是:服務端返回給客戶端的cookie過多,服務端和客戶端的進行傳輸通訊增長,影響性能,session的出現就是爲了解決這一問題。在客戶端域服務端進行交互的時候,沒必要要每次都返回cookie,只須要給客戶端一個惟一標識的id便可(JSESSIONID),這個ID值就是name爲JSESSIONID的cookie。session

  • 什麼是session?

 

   session會話技術是存儲在服務端的會話技術。客戶端每次訪問時,會在服務端建立一小塊內存,用來保存客戶端的信息,要求客戶端攜帶JSESSOIONID去尋找屬於本身的一小塊內存。session須要藉助cookie存儲的JSESSIONID值。問題是:若是存儲的session過多,形成服務端的壓力過大,效率下降。分佈式

  • 如何使用session?

  1.獲取session 性能

  HttpSession session = request.getSession();編碼

  這句話是得到屬於當前會話的session對象。若是該session對象已經存在,就直接返回;若是不存在,就會建立新的session對象返回(原理是:根據客戶端攜帶的JSESSIONID尋找服務端是否有該session)

  2.向session對象中存取數據

  由於session是域對象,全部有通用的三個方法

  session.setAttribute(String ,string)

  session.getAttribute(String)

  session. removeAttribute(String)

  3.session對象的生命週期

  建立:執行request.getSession()開始建立session對象

  銷燬:

  (1)session過時,默認30分鐘,

  (2)在服務器(非正常)關閉時銷燬。

 

   (3)手動銷燬session:使用session.invalidate();

  做用範圍:默認在一次會話中,也即在一次會話中的全部資源共用一個session對象

  瀏覽器關閉不等於session銷燬!!!   由於session技術是基於cookie技術實現,重啓瀏覽器在次訪問原來的鏈接依然會建立新的session對象。由於cookie默認在瀏覽器關閉時消失,也就意味着JSESSIONID找不到了。可是原來的session對象還在服務端存儲,只是再也找不到了(沒有了JSESSIONID),只有等到session自動銷燬。

  圖解session的存儲過程

  

 

總結:session和cookie都是爲了保持(記錄)用戶的訪問狀態,一方面是爲了業務功能的簡單實現,另外一方面是爲了簡化服務端程序設計。

分佈式session:解決的是session共享的問題。例如在tomcat下有兩個應用:web1和web2,訪問web1會建立一個session對象session1,訪問web2會建立session對象session2,在不一樣的應用中session是不共享的,要想解決session共享,就須要考慮使用分佈式session解決。

相關文章
相關標籤/搜索