當用戶首次與web服務器創建鏈接的時候,服務器會給用戶分發一個SessionID做爲標識。SessionID是一個由24個字符組成的隨機字符串。用戶每次提交頁面,瀏覽器都會把這個SesstionID包含在HTTP頭中提交給web服務器,這樣web服務器就能區分當前請求頁面是哪個客戶端。這個SessionID就是保存在客戶端的,屬於客戶端Session。java
其實客戶端Session默認是以cookie的形式來存儲的,因此當用戶禁用了cookie的話,服務器端就得不到SessionID。這時咱們可使用url的方式來存儲客戶端Session。也就是將SessionID直接寫在了url中,固然這種方法不經常使用。web
sessionid是一個會話的key,瀏覽器第一次訪問服務器會在服務器端生成一個session,有一個sessionid和它對應。tomcat生成的sessionid叫作jsessionid。 session在訪問tomcat服務器HttpServletRequest的getSession(true)的時候建立,tomcat的ManagerBase類提供建立sessionid的方法:隨機數+時間+jvmid; 它存儲在服務器的內存中,tomcat的StandardManager類將session存儲在內存中,也能夠持久化到file,數據庫,memcache,Redis等。客戶端只保存sessionid到cookie中,而不會保存session,session銷燬只能經過invalidate或超時,關掉瀏覽器並不會關閉session。數據庫
Cookie分爲內存中Cookie(也能夠說是進程中Cookie)和硬盤中Cookie。大部分的Session機制都使用進程中Cookie來保存Session id的,關閉瀏覽器後這個進程也就自動消失了,進程中的Cookie天然就消失了,那麼Session id也跟着消失了,再次鏈接到服務器時也就沒法找到原來的Session了。 固然,咱們能夠在登錄時點擊下次自動登陸,好比說CSDN的「記住我一週」,或者咱們的購物車信息能夠在切換不一樣瀏覽器時依然可用。這就要用到咱們上文提到的另外一種Cookie了——硬盤中Cookie,這時Session id將長期保存在硬盤上的Cookie中,直到失效爲止。瀏覽器
詳細參考:《服務器端Session和客戶端Session》tomcat