Detalles de la sesión


1. Cuando se cierra el cliente, el servidor no se cierra, ¿se obtiene la misma sesión dos veces?

Respuesta: Por defecto, no es lo mismo. Si son dos Sessionidénticos, puede crear una Cookieclave de objeto JSESSIONID, establecer el tiempo máximo de supervivencia para la Cookieconservación duradera Sessionde ID, puede lograr que el cliente se cierre, dos veces obtener Sessiones lo mismo.

Vamos a demostrarlo a continuación:

@WebServlet("/sessionDemo3")
public class SessionDemo3 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取HttpSession对象
        HttpSession session = request.getSession();
        System.out.println(session);

        //期望客户端关闭之后,session也能相同
        Cookie cookie = new Cookie("JSESSIONID",session.getId());
        cookie.setMaxAge(60 * 10); //设置cookie存活时间为十分钟
        response.addCookie(cookie); //发送cookie
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request, response);
    }
}

Ejecute el servidor, abra el navegador para acceder a este Servlet, cierre el navegador y visite nuevamente, la salida de la consola es la siguiente:
Inserte la descripción de la imagen aquí

2. El cliente no se cierra Después de cerrar el servidor, ¿se obtiene la misma sesión dos veces?

Respuesta: No es lo mismo, pero para garantizar que no se pierdan datos, tomcatlas siguientes dos tareas se completan automáticamente:

  • session的钝化: Antes de que el servidor se apague normalmente, sessionserialice el objeto en el disco duro
  • session的活化: Después de que se inicia el servidor, el sessionarchivo se convierte en un sessionobjeto en la memoria

Esto completa los datos no se pierde, tomcatpuede ayudarnos a completar el trabajo anterior, ¡pero IDEAno puede!

¿En cuanto a por qué Tomcatse puede hacer este trabajo? Escribimos dos nuevos Servlet, uno para sessionalmacenar datos, otro para obtener sessiondatos e imprimir (el código es simple, ya no se pega)

Luego coloque el proyecto outen la carpeta de proyecto generada comprimir, empaquetado con el .warsufijo del nombre de archivo, luego coloque su Tomcatdirectorio de webappsdirectorio de copia :
Inserte la descripción de la imagen aquí
ejecutando Tomcat, abra un navegador, acceda al envío sessionde Servlet, luego visite la recepción sessionde Servlet, Puede ver que la consola imprime hello:
Inserte la descripción de la imagen aquí
OK, ahora dejamos que el Tomcatshutdown normal ( shutdown.bat), luego de cerrar, Tomcatcomience a realizar 钝化operaciones.

Se Sessionserializa para:apache-tomcat-8.5.61 \ work \ Catalina \ localhost \ SessionDemoDebajo de la carpeta:
Inserte la descripción de la imagen aquí
reiniciar Tomcat, es decir, realizar la 活化operación, el archivo anterior que guarda el número de serie también se eliminará automáticamente, y luego visitamos la información de recepción Servlet: ¡la
Inserte la descripción de la imagen aquí
salida de la consola hello! ¡éxito!

3. ¿Cuándo se destruirá la sesión?

SessionDestruido después de que se cierra el servidor, si abre una página, la computadora Sessionse destruirá si no mueve la computadora durante un cierto período de tiempo

Si esperamos sessionsobrevivir más tiempo, podemos ir al tomcat\conf\web.xmlarchivo y encontrar:

  <!-- ==================== 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>

Para este código, 30simplemente cámbielo . Estos 30 son los 30 minutos predeterminados.

Supongo que te gusta

Origin blog.csdn.net/lesileqin/article/details/112688141
Recomendado
Clasificación