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 vous – mê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.
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