Session的工作原理
session是服務器端的一個集合,可以存儲任何東西。session最重要的特性,是可以識別客戶。
1.Session的工作原理
當我們的Servlet需要使用Session時,執行下面的代碼
HttpSession session = request.getSession();//取出session session.setAttribute("goods1","Scoat");//session存數據 session.getAttribute("goods1");//session取數據如果是第一次取session,服務器會創建一個session對象(session本身是一個map集合),并且存入服務器的session集合中以sessionId為標識鍵,也就是根據sessionId即可取到對應session的引用。同時使用session Servlet還獲得了一個sessionId,在響應時把這個sessionId以cookie的形式發給了客戶端。如果客戶訪問其它同一域的Servlet,這個sessionId會跟著請求上傳到服務器。那么如果請求的另一個Servlet也要使用session,會先檢查有沒有這個保存sessionId的Cookie,如果有則直接到session集合中取對應的session引用返回給要使用的Servlet,所以,只要客戶端存在這個sessionId,不管請求哪個Servlet,都可以拿到同一個session。所以Session就可以給不同的請求存儲數據。
2.Session過期
要保證session能夠跨請求存儲數據必須保證下面兩個條件必須滿足
(1).客戶瀏覽器不能關閉
因為session會給客戶保存一個sessionId,這個id是作為臨時cookie存在客戶瀏覽器緩存當中,如果關閉瀏覽器,緩存就沒了,sessionId自然也就消失了。重新打開瀏覽再請求,就是一個全新的請求,服務器會創建一個新的session,之前的session就沒法用了。
(2).請求不能超過session的過期時間
服務器的session如果始終沒有使用,保留著就是浪費服務器的資源,所以服務器會定期檢查session的最后訪問時間,如果這個時間超出session設置的過期時間,服務器就會銷毀這個session,那么客戶端即使把sessionId又傳上來,服務器也找不到它的session了,只會再重新創建一個新的session。
3.Session生命周期的操作方法
session.setMaxInactiveInterval(20 * ?60);//設置session過期時間 session.invalidate();//銷毀session的方法 session.getCreationTime();//獲得session的創建時間 session.getLastAccessedTime();//獲得session最后一次被使用的時間總結
以上是生活随笔為你收集整理的Session的工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中文linux(Ubuntu)下让dat
- 下一篇: 对于自我的反省 - 对底层人民认知产