Délai d'expiration de Session confusion de session.setMaxInactiveInterval(0)
Je suis nouveau sur JEE et c'est ce qui me confond. Selon HttpSession.html#setMaxInactiveInterval(int interval) documentation
Un
interval
valeur dezero
ou moins indique que le session devrait ne jamais le délai.
mais selon mon livre de texte (qui est déjà de quelques années - j'attends donc de ne pas être toujours à droite) à l'aide de zéro comme argument devrait provoquer session timeout immédiatement.
Ce code
public class Test extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute("foo", 42);
session.setMaxInactiveInterval(0);
out.println(session.getAttribute("foo"));//problem here
}
}
utilisé sur Glassfish 4.0 semble confirmer la théorie de manuel au lieu de la plus récente documentation officielle parce qu'elle renvoie d'État HTTP 500 - Erreur Interne du Serveur avec le message d'erreur
java.lang.IllegalStateException: getAttribute: Session already invalidated
Ce qui se passe ici? Est-ce Glassfish 4.0 bug ou d'une documentation qui est mal? Ou peut-être il y a une troisième option?
PS. Ce code fonctionne comme il se doit avec des valeurs négatives (session n'est pas invalidé) et je suis en utilisant -1
au lieu de 0
dans mon code. Ce qui m'intéresse, quel est le problème avec 0
.
-1
.Merci.
-1
fonctionne très bien et depuis, il semble plus sûr, je suis l'utiliser à la place de 0
. Je suis juste curieux de savoir quel est le problème avec le zéro.Qu'advient-il si vous définissez la
session-config
session-timeout
valeur 0 à web.xml?Quand j'enlève
session.setMaxInactiveInterval(0);
de code et l'utilisation <session-config><session-timeout>0</session-timeout></session-config>
dans web.xml
il semble fonctionner correctement (session n'est pas détruit). Ce qui est intéressant session.getMaxInactiveInterval()
retourne -60
(en secondes) il semble donc que la valeur de session-timeout
est converti à -1
(en minutes)Oui, la config est dans les minutes tandis que
setMaxInactiveInterval
est en secondes.
OriginalL'auteur JEENoob | 2014-01-11
Vous devez vous connecter pour publier un commentaire.
La Spécification Servlet chapitre sur les délais d'expiration de Session les états
Donc GlasshFish semble que les couverts. Je ne trouve pas de référence dans le cahier des charges qui dit que la même chose devrait être vraie pour une valeur de
0
avecsetMaxInactiveInterval()
. Cependant il ne dit0
est pas défini dans la spécification poursetMaxInactiveInterval
mais seulement pour<session-config>
Glassfish mis en œuvre correctement (mais pas tout à fait selon JavaDoc) de sorte qu'il n'est pas un bug. De toute façon vous donnera probablement la meilleure réponse que les non-verre-poisson-emploee pourrait donner l'acceptera votre réponse. Réservoir de vous une fois de plus.OriginalL'auteur Sotirios Delimanolis
C'est déjà temps de sortir et d'invalider
C'est donc ce message d'erreur approprié. (veuillez vous référer à la tête du premier livre de référence.)
Vous essayez d'accéder à la valeur de l'objet qui n'est pas exister. c'est déjà détruit
0
session sera annulée immédiatement, mais dans la documentation officielle docs.oracle.com/javaee/7/api/javax/servlet/http/... on peut lire que "d'Une valeur de l'intervalle de zéro ou moins indique que le session ne devrait jamais timeout.", qui a été la source de ma confusion.OriginalL'auteur charitha