SessionTimeout: web.xml vs session.maxInactiveInterval ()

J’essaie de mettre à jour une session Http en Java. Mon conteneur est WebLogic.

Actuellement, notre session expire dans le fichier web.xml , comme ceci

 15  

Maintenant, on me dit que cela mettra fin à la session (ou est-ce que ce sont toutes les sessions?) À la 15ème minute d’utilisation, quelle que soit leur activité.

Je me demande si cette approche est la bonne ou devrais-je fixer par

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

Je ne veux pas laisser tomber toutes les sessions à 15 minutes, seulement celles qui ont été inactives pendant 15 minutes.

Ces méthodes sont-elles équivalentes? Devrais-je privilégier la configuration web.xml ?

Maintenant, on me dit que cela mettra fin à la session (ou est-ce que ce sont toutes les sessions?) À la quinzième minute d’utilisation, quelle que soit leur activité .

C’est faux . Il ne fera que tuer la session lorsque le client associé (navigateur Web) n’a pas accédé au site Web pendant plus de 15 minutes. L’activité compte certainement, exactement comme prévu initialement, en voyant votre tentative de résoudre ce problème.

HttpSession#setMaxInactiveInterval() ne change pas beaucoup ici en passant. Il fait exactement la même chose que dans web.xml , avec la seule différence que vous pouvez modifier / définir par programme pendant l’exécution. Le changement par la voie n’affecte que l’instance de la session en cours, pas globalement (sinon cela aurait été une méthode static ).


Pour jouer et expérimenter cela vousmême , essayez de définir à 1 minute et créez un HttpSessionListener comme suit:

 @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 vous n’êtes pas encore sur Servlet 3.0 et que vous ne pouvez donc pas utiliser @WebListener , alors inscrivez-vous dans le fichier web.xml comme suit) :

  com.example.HttpSessionChecker  

Notez que le servletcontainer ne détruira pas immédiatement les sessions après exactement la valeur du délai d’attente. C’est un travail d’arrière-plan qui s’exécute à certains intervalles (par exemple, 5 à 15 minutes selon la charge et le type / marque du conteneur de servlet). Ne soyez donc pas surpris si vous ne voyez pas la ligne destroyed dans la console immédiatement après exactement une minute d’inactivité. Cependant, lorsque vous lancez une requête HTTP dans une session dépassée mais pas détruite, elle sera immédiatement détruite.

Voir également:

  • Comment fonctionnent les servlets? Instanciation, sessions, variables partagées et multithreading

Maintenant, on me dit que cela mettra fin à la session (ou est-ce que ce sont toutes les sessions?) À la quinzième minute d’utilisation, quelle que soit leur activité.

Non ce n’est pas vrai. L’ session-timeout configure un session-timeout par session en cas d’inactivité.

Ces méthodes sont-elles équivalentes? Devrais-je privilégier la configuration web.xml?

Le paramètre dans le web.xml est global, il s’applique à toutes les sessions d’un contexte donné. Par programme, vous pouvez changer cela pour une session particulière.

S’il vous plaît vérifier le délai de séparation dans le pseudo-code ci-dessous

   AccountWeb  [Re]configures log4j org.springframework.web.util.Log4jConfigListener   How often to check for changes in configfile (ms) log4jRefreshInterval 60000   Avoid setting system property as there might be several apps in same VM log4jExposeWebAppRoot false   The listener that will start Account AccountInitialiser com.te.account.AccountInitializer   Apache-Axis Servlet AxisServlet org.apache.axis.transport.http.AxisServlet 200   Axis Admin Servlet AdminServlet org.apache.axis.transport.http.AdminServlet 100   AxisServlet /servlet/AxisServlet   AxisServlet *.jws   AxisServlet /services/*   AdminServlet /servlet/AdminServlet   index.html index.htm index.jsp default.html default.htm default.jsp      jdbc/AccountDB javax.sql.DataSource Container Shareable