sessionid是一個會話的key,瀏覽器第一次訪問服務器會在服務器端生成一個session,有一個sessionid和它對應。tomcat生成的sessionid叫作jsessionid。web
session在訪問tomcat服務器HttpServletRequest的getSession(true)的時候建立,tomcat的ManagerBase類提供建立sessionid的方法:隨機數+時間+jvmid;redis
存儲在服務器的內存中,tomcat的StandardManager類將session存儲在內存中,也能夠持久化到file,數據庫,memcache,redis等。客戶端只保存sessionid到cookie中,而不會保存session,session銷燬只能經過invalidate或超時,關掉瀏覽器並不會關閉session。算法
那麼Session在什麼時候建立呢?固然仍是在服務器端程序運行的過程當中建立的,不一樣語言實現的應用程序有不一樣建立Session的方法,而在Java中是經過調用HttpServletRequest的getSession方法(使用true做爲參數)建立的。在建立了Session的同時,服務器會爲該Session生成惟一的Session id,而這個Session id在隨後的請求中會被用來從新得到已經建立的Session;在Session被建立以後,就能夠調用Session相關的方法往Session中增長內容了,而這些內容只會保存在服務器中,發到客戶端的只有Session id;當客戶端再次發送請求的時候,會將這個Session id帶上,服務器接受到請求以後就會依據Session id找到相應的Session,從而再次使用之。數據庫
建立:sessionid第一次產生是在直到某server端程序調用 HttpServletRequest.getSession(true)這樣的語句時才被建立。瀏覽器
刪除:超時;程序調用HttpSession.invalidate();程序關閉;tomcat
session存放在哪裏:服務器端的內存中。不過session能夠經過特殊的方式作持久化管理(memcache,redis)。服務器
session的id是從哪裏來的,sessionID是如何使用的:當客戶端第一次請求session對象時候,服務器會爲客戶端建立一個session,並將經過特殊算法算出一個session的ID,用來標識該session對象cookie
session會由於瀏覽器的關閉而刪除嗎? 不會,session只會經過上面提到的方式去關閉。session
下面是tomcat中session的建立: ManagerBase是全部session管理工具類的基類,它是一個抽象類,全部具體實現session管理功能的類都要繼承這個類,該類有一個受保護的方法,該方法就是建立sessionId值的方法: (tomcat的session的id值生成的機制是一個隨機數加時間加上jvm的id值,jvm的id值會根據服務器的硬件信息計算得來,所以不一樣jvm的id值都是惟一的), StandardManager類是tomcat容器裏默認的session管理實現類, 它會將session的信息存儲到web容器所在服務器的內存裏。 PersistentManagerBase也是繼承ManagerBase類,它是全部持久化存儲session信息的基類,PersistentManager繼承了PersistentManagerBase,可是這個類只是多了一個靜態變量和一個getName方法,目前看來意義不大,對於持久化存儲session,tomcat還提供了StoreBase的抽象類,它是全部持久化存儲session的基類,另外tomcat還給出了文件存儲FileStore和數據存儲JDBCStore兩個實現。jvm