JavaWeb中session創建於銷毀的問題
阿新 • • 發佈:2017-06-14
true .get als 截器 創建 建立連接 自己 跟著 ssi
今天遇到一個奇怪的問題,自己添加了一個session的監聽,用來監聽在線的人數。但打開瀏覽器時一直沒有走進這個監聽中來。最後百度找到了原因:
我們一直存在一個誤區,javaweb中的session什麽時候創建?我一直認為是第一次與瀏覽器建立連接的時候,就自動創建一個session。其實不然!
只有在server端的代碼調用request.getSession(true)這個方法時,才互創建一個session。其中true表示,如果存在一個相同的session,則直接返回,如果不存在,則創建一個新的session;false表示,如果不存在,則返回null。而我的代碼中比較簡單,沒有用到session存儲東西,所有一直沒調用request.getSession(true)這個方法。
在攔截器中加了這句話之後,問題又來了,後面的每個請求,都會去創建一個session,這與之前的理解的一個瀏覽器對應一個session又相沖突了。猜測是因為每次請求的sessionId不同導致的,應該是在請求響應的時候沒有設置cookie導致的,HTTP請求是無狀態的,每個請求對server來說都是新的。
為了搞清內部原理,決定跟著源碼繼續看下session具體的創建和銷毀邏輯吧。
JavaWeb中session創建於銷毀的問題