2009-12-04 5 views
1

J'essaie d'ajuster le délai de session en utilisant HttpSession.setMaxInactiveInterval et cela ne fonctionne pas.HttpSession.setMaxInactiveInterval ne fonctionne pas dans Tomcat 6

Voici mon code (Groovy), qui est en cours d'exécution sans exception:

def paramValue = WebAttributes.REQUEST.getParameter('maxInactiveSeconds'); 
println 'paramValue=' + paramValue; 
if (paramValue != null) { 
    def seconds = Integer.parseInt(paramValue); 
    WebAttributes.REQUEST.getSession().setMaxInactiveInterval(seconds); 
} 

Quelques détails:

  • Tomcat 6.0.16
  • Cela se passe dans une webapp distincte de la 'normal' (c'est-à-dire avec un contenu visuel), mais j'ai défini emptySessionPath = "true" pour que la session * soit * partagée * entre les applications web

grâce,

haruspice

Répondre

1

Il s'avère qu'il y avait une autre technologie définissant le maxInactiveInterval de retour à 30 min, écrasant mes tentatives pour le changer. Tomcat, Java, etc. fonctionnaient comme prévu.

+0

quelle est cette technologie? – tylerdurden

3

Comment avez-vous tester? Chaque nouvelle demande reporte le délai d'attente, le savez-vous? F5'ing la demande jusqu'à ce que le délai d'attente prévu ne va pas aider. Le webcontainer ne détruira pas immédiatement la session, donc vous ne verrez aucun résultat immédiat de HttpSessionListener. Il va les récolter à certains intervalles, ce qui peut être chaque minute, mais peut également être chaque 15 minutes. Il va cependant le récolter immédiatement si une nouvelle requête est arrivée après le délai d'expiration.

En ce qui concerne votre « la session devrait être partagée » phrase, le meilleur moyen de le vérifier est bien sûr en vérifiant l'ID de session, soit par programme (par exemple, l'affichage ${pageContext.session.id}) ou simplement la détermination de la valeur du cookie jsessionid dans votre navigateur web.

Pour surveiller la création de la session et la détruire, implémentez un HttpSessionListener factice. Voici un exemple de base:

public class MyHttpSessionListener implements HttpSessionListener { 
    public void sessionCreated(HttpSessionEvent event) { 
     System.out.printf("%s session %s created %n", new Date(), event.getSession().getId()); 
    } 
    public void sessionDestroyed(HttpSessionEvent event) { 
     System.out.printf("%s session %s destroyed %n", new Date(), event.getSession().getId()); 
    } 
} 

Espérons que cela aide.

+0

Merci pour votre réponse réfléchie et bien informée. J'ai un message d'avertissement de délai d'expiration de session JavaScript incorporé sur la page. Il démarre une minuterie avec une durée basée sur HttpSession.getMaxInactiveInterval(). Mon code ne semble pas modifier cette valeur du tout - je tente de le régler à 40 sec. (pour les tests automatisés) mais il reste 30 min. quand la page rentre. –

Questions connexes