Je dois donner à mon utilisateur une interface Web pour modifier le délai d’expiration de la session. Ainsi, différentes installations de l’application Web pourraient avoir des délais d’attente différents pour leurs sessions, mais leur web.xml
ne peut pas être différent.
Existe-t-il un moyen de définir le délai d’expiration de la session de manière à pouvoir, par exemple, ServletContextListener.contextInitialized()
pour lire l’intervalle configuré et le définir au démarrage de l’application?
Merci beaucoup.
Au lieu d’utiliser un ServletContextListener, utilisez un HttpSessionListener . Dans la méthode sessionCreated()
, vous pouvez définir le délai d’expiration de la session par programmation.
public class MyHttpSessionListener implements HttpSessionListener{ public void sessionCreated(HttpSessionEvent event){ event.getSession().setMaxInactiveInterval(15*60); //in seconds } public void sessionDestroyed(HttpSessionEvent event){} }
Et n’oubliez pas de définir l’écouteur dans le descripteur de déploiement:
... com.example.MyHttpSessionListener
Cependant, je vous recommande de créer différents fichiers web.xml pour chaque application et de définir le délai d’expiration de la session:
... 15
Existe-t-il un moyen de définir le délai de session par programmation
Il existe essentiellement trois façons de définir la valeur du délai d’expiration de la session:
session-timeout
dans le fichier web.xml
standard ~ ou ~ session-timeout
par défaut du serveur (et donc en la configurant au niveau du serveur) ~ ou ~ HttpSession. setMaxInactiveInterval(int seconds)
HttpSession. setMaxInactiveInterval(int seconds)
méthode dans votre Servlet ou JSP. Mais notez que la dernière option définit la valeur du délai d’attente pour la session en cours, ce n’est pas un paramètre global.
Comme d’autres utilisateurs l’ont dit, vous pouvez changer de Session Listener. Mais vous pouvez le changer directement dans votre servlet, par exemple.
getRequest().getSession().setMaxInactiveInterval(123);