問:浏覽器通路一個站點,産生一個session,接着進行以下操作:
1、在同一個浏覽器新打開一個tab卡,通路同一站點,此時幾個session
2、将新打開的tab卡拖拽出來,成為兩個浏覽器的時候,建立了幾個session
3、換一個浏覽器,通路同一個站點,此時幾個session
4、HttpSession、HttpServletRequest.getSession()、HttpServletRequest.getSession(true)、HttpServletRequest.getSession(false)是不是同一個session?
先看産生的第一個session
通路本地的tomcat,将第一次的sessionId存如session,可以看到四個sessionId相同。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuUWM1UWOkFWZ3EmZ3ITMxQmZ3MGN5QWZkZGOjJDO1YzNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
新打開tab,比較兩個sessionId
發現兩個tab卡的sessionId也是相同的
拖拽出來之後
發現兩個sessionId依然相同
換FF再打開
終于和之前的不一樣了。
總結
1.對于同一個浏覽器,在不清除cookie、緩存、關閉浏覽器的前提下,如果沒到失效時間,session都是同一個
2.拖拽出來之後,session依然是同一個
3.換一個浏覽器,session改變
4.HttpSession、HttpServletRequest.getSession()、HttpServletRequest.getSession(true)、HttpServletRequest.getSession(false)擷取到的是同一個session
題外話
session存在于服務端,由于http是無狀态的,服務端無法差別請求由哪個用戶端發送,最終還是依賴cookie,每次發送請求攜帶一個JSESSIONID,即服務端擷取的sessionId,唯一辨別一個用戶端請求。