Directorio de artículos
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 Session
idénticos, puede crear una Cookie
clave de objeto JSESSIONID
, establecer el tiempo máximo de supervivencia para la Cookie
conservación duradera Session
de ID
, puede lograr que el cliente se cierre, dos veces obtener Session
es 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:
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, tomcat
las siguientes dos tareas se completan automáticamente:
session的钝化
: Antes de que el servidor se apague normalmente,session
serialice el objeto en el disco durosession的活化
: Después de que se inicia el servidor, elsession
archivo se convierte en unsession
objeto en la memoria
Esto completa los datos no se pierde, tomcat
puede ayudarnos a completar el trabajo anterior, ¡pero IDEA
no puede!
¿En cuanto a por qué Tomcat
se puede hacer este trabajo? Escribimos dos nuevos Servlet
, uno para session
almacenar datos, otro para obtener session
datos e imprimir (el código es simple, ya no se pega)
Luego coloque el proyecto out
en la carpeta de proyecto generada comprimir, empaquetado con el .war
sufijo del nombre de archivo, luego coloque su Tomcat
directorio de webapps
directorio de copia :
ejecutando Tomcat
, abra un navegador, acceda al envío session
de Servlet
, luego visite la recepción session
de Servlet
, Puede ver que la consola imprime hello
:
OK, ahora dejamos que el Tomcat
shutdown normal ( shutdown.bat
), luego de cerrar, Tomcat
comience a realizar 钝化
operaciones.
Se Session
serializa para:apache-tomcat-8.5.61 \ work \ Catalina \ localhost \ SessionDemoDebajo de la carpeta:
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
salida de la consola hello
! ¡éxito!
3. ¿Cuándo se destruirá la sesión?
Session
Destruido después de que se cierra el servidor, si abre una página, la computadora Session
se destruirá si no mueve la computadora durante un cierto período de tiempo
Si esperamos session
sobrevivir más tiempo, podemos ir al tomcat\conf\web.xml
archivo 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, 30
simplemente cámbielo . Estos 30 son los 30 minutos predeterminados.