1. 程式人生 > >第三十三章:Session會話

第三十三章: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之間關聯的技術內幕
在這裡插入圖片描述