java Servlet API引入session 機制來跟蹤客戶的狀態,session指的是在一段時間內,單個客戶和web服務器之間一連串的交互過程,在一個session中,一個客戶可能會多次請求同一個網頁,也可能請求多個不同服務器資源,例如:在一個郵件系統應用中,從一個客戶登錄到郵件系統,到寫信,收信和發信等,到最后退出郵件系統,整個過程為一個session;再例如:大家在網上購物的時候,從購物到最后的付款,整個過程也是一個session 。
session對像是jsp中的內置對象,可以直接使用;在Servlet中使用session時,必須先創建出該對象,Servlet中創建session的方法:
HttpSession session=request.getSession();或 HttpSession session=request.getSession(boolean value);
在服務器上,通過session ID來區分每一個請求服務器的用戶,用戶只要一連接到服務器,服務器就會為之分配一個唯一的不會重復的session ID,session ID由服務器統一管理,人為不能控制
session中的主要方法:
- session.getId();//獲取session ID,長度為32位
-
session.isNew();//判斷是否是新建立的session
-
session.getCreationTime();//獲取session創建的時間
- session.getLastAccessedTime();//獲取用戶最后操作時間
-
sesson.setAttribute(String key,Object value);//將對象存到session中
-
session.getAttribute(String key);//獲取session中存的Object對象
- session.removeAttribute(String key);//將鍵值為key的對象從session中刪除
session的銷毀
- web容器關閉或重啟,session會死亡
- 調用session.invalidate();方法,強制session死亡
- 前后兩次請求超過了session指定的生命周期時間,默認為30分鍾,我們可以通過在web.xml文件中進行如下配置:
<session-config> <session-timeout>5</session-timeout> </session-config>
也可以調用session.setMaxInactiveInterval(int intelval);方法來設置,單位為秒。
補充:session與cookie的區別
- session將信息保存在服務器上,cookie保存在客戶端上
- session比cookie更安全,session比cookie更占資源
- session使用cookie的機制,如果cookie被禁用,那么session也無法使用,因為session ID是以cookie的形式保存在客戶端的內存當中