會話技術-Session-細節
阿新 • • 發佈:2022-12-03
會話技術-Session-細節
細節1
1. 當客戶端關閉後,伺服器不關閉,兩次獲取session是否為同一個?
預設情況下。不是。
如果需要相同,則可以建立Cookie,鍵為JSESSIONID,設定最大存活時間,讓cookie持久化儲存。
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
package com.example.day_16_cookidsession.session; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; @WebServlet("/sessionDemo3") public class SessionDemo3 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.獲取session HttpSession session = request.getSession(); System.out.println(session); //期望客戶端關閉後,session也能相同 Cookie c = new Cookie("JSESSIONID",session.getId()); c.setMaxAge(60*60); response.addCookie(c); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response); } }
細節2
2. 客戶端不關閉,伺服器關閉後,兩次獲取的session是同一個嗎?
不是同一個,但是要確保資料不丟失。tomcat自動完成以下工作
session的鈍化:
在伺服器正常關閉之前,將session物件系列化到硬碟上
session的活化:
在伺服器啟動後,將session檔案轉化為記憶體中的session物件即可。
細節3
3. session什麼時候被銷燬?
1. 伺服器關閉
2. session物件呼叫invalidate() 。
3. session預設失效時間 30分鐘
選擇性配置修改
<session-config>
<session-timeout>30</session-timeout>
</session-config>