1. 程式人生 > 其它 >會話技術-Session-細節

會話技術-Session-細節

會話技術-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>