兩個基本概念的生命周期
session:
當新客戶端發現一個HTTP請求時服務端會創建一個session.並分配一個sessionID作為服務端來客戶端的識別,session對象會保存在服務端.此時session對象處天NEW STATE狀態,如果調用 session.isNew()則返回true.
當服務器處理完后,會將sessionID同reponse 一起傳回客戶端,並將其存到cookie中;
當客戶端再發送請求的時候.會將sessionID連同request一起發送給服務端;
服務端再根據傳過來的sessionID將這次request與保存在服務端的session對象聯系起來.此時的session對象已不是NEWSTATE狀態.
這樣循環多次.直到超時或銷毀.
注:當禁用cookie時也是不能使用session的;
cookie:
cookie是在客戶端保存的方案.而session是在服務端保存的方案.
如果cookie不設定時間的話就表視它的生命周期為瀏覽器會話的期間,只要關閉IE,cookie就消失了
這種cookie被稱為會話cookie.其一般不保存在硬盤上.而是保存在內存中.
如果設置了過期時間.那么瀏覽器會把cookie保存到硬盤中,再次打IE時會依然有效.直到它的有效期
超時;
注:存儲在硬盤中的cookie可以在不同IE間共享;
1.背景
隨着互聯網的日益壯大,網站的pv和uv成線性或者指數倍的增加.單服務器單數據庫早已經不能滿足實際需求。目前大多數大型網站的服務器都采用了分布式服務集群的部署方式,所謂集群,就是讓一組計算機服務器協同工作,解決大並發,大數據量瓶頸問題。但是在服務集群中,session共享往往是一個比較頭疼的問題。因為session是在服務器端保存的,如果用戶跳轉到其他服務器的話,session就會丟失,一般情況下,session不可跨服務器而存在。於是就有了分布式系統的session共享問題。
2.Session共享實現方案
Session共享有多種解決方法,常用的有四種:客戶端Cookie保存、服務器間Session同步、使用集群管理Session、把Session持久化到數據庫。下面分別就這四種方案進行介紹和比較。
2.1客戶端Cookie保存
介紹說明
以cookie加密的方式保存在客戶端.優點是減輕服務器端的壓力,每次session信息被寫在客服端,然后經瀏覽器再次提交到服務器。即使兩次請求在集群中的兩台服務器上完成,也可以到達session共享。
這種解決方法的優點是session信息不用存放在服務器端,大大減輕了服務器的壓力。另一個優點是一個session中的兩次或多次請求可以在一個集群中的多個服務器上完成,可以避免單點故障。目前,淘寶是采用的這種解決方案。
缺點有幾個,一是傳遞cookie時,http信息頭的長度限制使我們只能夠在cookie中存入一部分用戶信息;二是需要額外地做session信息加密的工作;第三,如果采用這種方式,每次訪問網站二級域名時都會在http信息頭中帶有這些以cookie形式存儲的session信息,會占用一定的帶寬;最后,由於這種方式是在客戶端進行信息存儲,用戶完全可以禁用cookie或刪除cookie,不是很可靠。
- 支持Tomcat6、Tomcat7
- 支持黏性、非黏性Session
- 無單一故障點
- 可處理tomcat故障轉移
- 可處理memcached故障轉移
- 插件式session序列化
- 允許異步保存session,以提升響應速度
- 只有當session有修改時,才會將session寫回memcached
- JMX管理&監控