第三十三章:Session會話
作者:java_wxid
什麼是Session會話?
1.Session是會話,表示客戶端和伺服器之間聯絡的一個物件。
2.Session是一個域物件。
3.Session經常用來儲存使用者的資料。
如何建立Session和獲取(id號,是否為新)
呼叫一個方法request.getSession().
第一次呼叫是建立Session物件並返回
之後呼叫都是獲取Session物件。
isNew() 返回當前Session是否是剛創建出來的,返回true表示剛建立。返回false表示獲取。
每個Session會話都有自己的唯一標識,就是ID。
Session域資料的存取
setAttribute 儲存資料
getAttribute 獲取資料
protected void setAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); HttpSession session = request.getSession(); session.setAttribute("key1", username); response.getWriter() .write("已經把你請求過來的引數【" + username + "】給儲存到Session域中"); } protected void getAttribute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Object attribute = request.getSession().getAttribute("key1"); response.getWriter().write("你剛剛儲存的資料是:" + attribute); }
Session生命週期控制
在Tomcat伺服器上,Session的預設存活時間是:30分鐘。因為在Tomcat的配置檔案web.xml中早以有如下的配置:
以下的配置決定了在此tomcat伺服器上所有的web工程,創建出來的所有Session物件。預設超時時間都是30分鐘。
<!-- ==================== Default Session Configuration ================= --> <!-- You can set the default session timeout (in minutes) for all newly --> <!-- created sessions by modifying the value below. --> <session-config> <session-timeout>30</session-timeout> </session-config>
我們也可以給自己的web工程,單獨配置超時時間。只需要在自己的web工程中在web.xml配置檔案裡做相同的配置即可。
以下配置,把自己的web工程所有的Session都配置超時時間為20分鐘了。
<!-- 表示當前的web工程,所有創建出來的Session預設超時時間為20分鐘 -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
以上配置檔案的配置的方式都是對Tomcat伺服器,或對web工程創建出來的所有Session集體生效。
如果想對某個單個的Session進行設定,可以使用api進行單獨設定
setMaxInactiveInterval( time ); 這裡以秒為單位
如果值是正數,表示指定的秒數後Session就會超時(Session超時就會被銷燬)
如果值是負數,表示Session永遠不超時(極少使用)
Session的超時,是指客戶端和伺服器之間兩次請求的間隔時間。如果中間沒有任何的請求,就會把Session超時掉。
invalidate():使當前會話,馬上被超時
protected void deleteNow(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.invalidate();// 結束當前Session
response.getWriter().write("當前會話已經超時了");
}
protected void life3(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession httpSession = request.getSession();
httpSession.setMaxInactiveInterval(3);// 表示這個Session3秒之後就會超時。
response.getWriter().write("已經設定了當前Session超時時間為3秒" );
}
protected void defaultLife(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
// 獲取客戶端和伺服器之間最大的請求間隔時間。
// 就是超時時間。位置 為秒
int maxInactiveInterval = session.getMaxInactiveInterval();
response.getWriter().write("預設的超時時間為:" + maxInactiveInterval);
}
瀏覽器和Session之間關聯的技術內幕