---
# System prepended metadata

title: session會話跟蹤技術
tags: [Java Web-Servlet]

---

# session會話跟蹤技術
###### tags: `Java Web-Servlet`

![](https://i.imgur.com/VsKVpSb.png)
客戶端進入後，服務器會判斷是否為首次進入，首次進入慧芬派一組新的ID，非首次則沿用舊ID
![](https://i.imgur.com/zF5C1jZ.png)
上圖的第二、第三次的ID，就是相同客戶端進入，所以顯示的ID也都相同
![](https://i.imgur.com/iPlZWwV.png)
可以在瀏覽器的COOKIE查看
![](https://i.imgur.com/Y4rR3lM.png)
或是利用debug的斷點查看，都顯示相同ID
![](https://i.imgur.com/F5A4V54.png)
###    1)Http是無狀態的
#### Http無狀態：
服務器無法判斷這兩次請求是同一個客戶端發過來的，還是不同的客戶端發過來的
#### 無狀態帶來的現實問題：
第一次請求是添加商品到購物車、第二次請求是結帳，如果這兩次請求服務器無法區分是同一個用戶，就會導致混亂
通過會話跟蹤技術來解決無狀態的問題
###    2)會話跟蹤技術
客戶端第一次發請求給服務器，服務器獲取session，獲取不到，則創建新的，然後響應給客戶端
下次客戶端給服務器發請求時，會把sessionID帶給服務器，那麼服務器就能獲取到了，服務器就判斷這一次請求和上次某次請求是同一個客戶端，從而能區分開客戶端
####    常用的API：
        request.getSession()：獲取當前的會話，沒有則創建一個新的會話
        request.getSession(true)：效果和不帶參數相同
        request.getSession(false)：獲取當前會話，沒有則返回true，不會創建新的

        session.getId()：獲取sessionID
        session.isNew()：判斷當前session是否是新的
        session.getMaxInactiveInterval()：session的非激活間隔時長，默認1800秒
        session.setMaxInactiveInterval()：
        session.invalidate()：強制性讓會話立即失效