unlimited mvc expiration java session servlets weblogic session-timeout

java - mvc - web xml session expiration time



SessionTimeout: web.xml vs session.maxInactiveInterval() (3)

Ahora, me han dicho que esto terminará la sesión (¿o son todas las sesiones?) En el minuto 15 de uso, independientemente de su actividad .

Esto está mal . Simplemente matará a la sesión cuando el cliente asociado (webbrowser) no haya accedido al sitio web durante más de 15 minutos. La actividad ciertamente cuenta, exactamente como inicialmente esperabas, viendo tu intento de resolver esto.

La HttpSession#setMaxInactiveInterval() no cambia mucho aquí por cierto. Hace exactamente lo mismo que <session-timeout> en web.xml , con la única diferencia de que puede cambiarlo / configurarlo programáticamente durante el tiempo de ejecución. El cambio por cierto solo afecta a la instancia de sesión actual, no globalmente (de lo contrario, hubiera sido un método static ).

Para jugar y experimentar esto usted mismo , intente establecer <session-timeout> en 1 minuto y cree un HttpSessionListener siguiente manera:

@WebListener public class HttpSessionChecker implements HttpSessionListener { public void sessionCreated(HttpSessionEvent event) { System.out.printf("Session ID %s created at %s%n", event.getSession().getId(), new Date()); } public void sessionDestroyed(HttpSessionEvent event) { System.out.printf("Session ID %s destroyed at %s%n", event.getSession().getId(), new Date()); } }

(Si todavía no está en Servlet 3.0 y no puede usar @WebListener , regístrese en web.xml siguiente manera) :

<listener> <listener-class>com.example.HttpSessionChecker</listener-class> </listener>

Tenga en cuenta que el servletcontainer no destruirá las sesiones inmediatamente después del valor de tiempo de espera excedido. Es un trabajo en segundo plano que se ejecuta en ciertos intervalos (por ejemplo, 5 ~ 15 minutos dependiendo de la carga y del servletcontainer make / type). Así que no se sorprenda si no ve la línea destroyed en la consola inmediatamente después de exactamente un minuto de inactividad. Sin embargo, cuando lanza una solicitud HTTP en una sesión agotada pero no destruida, se destruirá inmediatamente.

Ver también:

Estoy intentando agotar el tiempo de una HttpSession en Java. Mi contenedor es WebLogic.

Actualmente, tenemos nuestro tiempo de espera de sesión establecido en el archivo web.xml , como este

<session-config> <session-timeout>15</session-timeout> </session-config>

Ahora, me han dicho que esto terminará la sesión (¿o son todas las sesiones?) En el minuto 15 de uso, independientemente de su actividad.

Me pregunto si este enfoque es el correcto, o debo programar programáticamente el límite de tiempo de inactividad

session.setMaxInactiveInterval(15 * 60); //15 minutes

No quiero abandonar todas las sesiones en 15 minutos, solo aquellas que han estado inactivas durante 15 minutos.

¿Son estos métodos equivalentes? ¿Debo favorecer la configuración web.xml ?


Ahora, me han dicho que esto terminará la sesión (¿o son todas las sesiones?) En el minuto 15 de uso, independientemente de su actividad.

No, eso no es verdad. El session-timeout configura un session-timeout por sesión en caso de inactividad.

¿Son estos métodos equivalentes? ¿Debo favorecer la configuración web.xml?

La configuración en web.xml es global, se aplica a todas las sesiones de un contexto determinado. Programativamente, puede cambiar esto para una sesión en particular.


Por favor, compruebe el tiempo de espera de la sesion en el pseudo codigo siguiente

<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"`enter code here` xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanenter code herece" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>AccountWeb</display-name> <listener> <description>[Re]configures log4j</description> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <context-param> <description>How often to check for changes in configfile (ms)</description> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <context-param> <description>Avoid setting system property as there might be several apps in same VM</description> <param-name>log4jExposeWebAppRoot</param-name> <param-value>false</param-value> </context-param> <listener> <description>The listener that will start Account</description> <display-name>AccountInitialiser</display-name> <listener-class>com.te.account.AccountInitializer</listener-class> </listener> <servlet> <display-name>Apache-Axis Servlet</display-name> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> <load-on-startup>200</load-on-startup> </servlet> <servlet> <display-name>Axis Admin Servlet</display-name> <servlet-name>AdminServlet</servlet-name> <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/servlet/AxisServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>*.jws</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- <resource-ref> <description>The queue used to publish logging events</description> <res-ref-name>jms/LoggingAppenderQueue</res-ref-name> <res-type>javax.jms.Queue</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> <resource-ref> <description>The connection factory for the logging appender queue</description> <res-ref-name>jms/LoggingAppenderQueueConnFactory</res-ref-name> <res-type>javax.jms.QueueConnectionFactory</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> --> <resource-ref> <description> </description> <res-ref-name>jdbc/AccountDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> </web-app>