Cookie 和 Session 的區別和聯系?session的生命周期?多個服務器部署session的管理?


一、session 和 cookie

1、cookie

  Cookie會根據響應報文里的一個叫做Set-Cookie的首部字段信息,通知客戶端保存Cookie。當下次客戶端再向服務端發起請求時,客戶端會自動在請求報文中加入Cookie值之后發送給服務器

  cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用范圍。若不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,關閉瀏覽器窗口,cookie就消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。

  會話cookie一般不存儲在硬盤上而是保存在內存里,當然這種行為並不是規范規定的。若設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉后再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存里的cookie,不同的瀏覽器有不同的處理方式。

2、session

  session機制采用的是一種在服務器端保持狀態的解決方案。同時我們也看到,由於采用服務器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要借助於cookie機制來達到保存標識的目的。而session提供了方便管理全局變量的方式 。

  session是針對每一個用戶的,變量的值保存在服務器上,用一個sessionID來區分是哪個用戶session變量,這個值是通過用戶的瀏覽器在訪問的時候返回給服務器,當客戶禁用cookie時,這個值也可能設置為由get來返回給服務器。

二、Session 和 Cookie 的區別

(1)session 和 cookie 都是由服務器生成的;

(2)session 和 cookie 都是鍵值對,即 session 和 cookie 就是用來保存特定的值的一種技術。

(3)session 是保存在服務器的,cookie是返回給客戶端的。一般來說,sessionId 是通過類似於 cookie 的形式返回給客戶端的;

(4)客戶端會在發送請求的時候,自動將本地存活的 cookie 封裝在信息頭中發送給服務器;

(5)cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session。

(6)session 和 cookie 都是由生命周期的:

  cookie的生命周期受到 cookie 自身生命周期以及客戶端是否保留 cookie 文件的影響;

       session的生命周期受到 session 自身的存活周期以及客戶端連接是否關閉的影響;

(7) session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用COOKIE。

(8)單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。

三、session 和 cookie 的聯系  

  當程序需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求里是否已包含了一個session標識(稱為session id),如果已包含則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。保存這個session id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。一般這個cookie的名字都是類似於SEEESIONID。

  cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回服務器。經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的后面。還有一種技術叫做表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞回服務器。

 

 

 

四、session的生命周期(https://www.cnblogs.com/caiyao/p/4082984.html)

  1、Session存儲在服務器端,一般放置在服務器的內存中(為了高速存取),Sessinon在用戶訪問第一次訪問服務器時創建,需要注意只有訪問JSP、Servlet等程序時才會創建Session,只訪問HTML、IMAGE等靜態資源並不會創建Session,可調用request.getSession(true)強制生成Session。

  2、Session生成后,只要用戶繼續訪問,服務器就會更新Session的最后訪問時間,並維護該Session。用戶每訪問服務器一次,無論是否讀寫Session,服務器都認為該用戶的Session"活躍(active)"了一次。

  3、Session什么時候失效

   (1) 服務器會把長時間沒有活動的Session從服務器內存中清除,此時Session便失效。Tomcat中Session的默認失效時間為20分鍾。

  (2)調用Session的invalidate方法。

 

  4、若生命周期以20分鍾為例:

  (1)cookie的生命周期是累計的,從創建時,就開始計時,20分鍾后,cookie生命周期結束,

  (2)session的生命周期是間隔的,從創建時,開始計時如在20分鍾,沒有訪問session,那么session生命周期被銷毀

  但是,如果在20分鍾內(如在第19分鍾時)訪問過session,那么,將重新計算session的生命周期

  (3)關機會造成session生命周期的結束,但是對cookie沒有影響


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM