Question

Je suis nouveau sur JEE et c'est ce qui me rend confus.Selon HttpSession.html#setMaxInactiveInterval (intervalle int) Documentation

Un interval valeur de zero ou moins indique que le la session ne devrait jamais expirer.

mais selon mon manuel (qui a déjà quelques années - donc je m'attends à ce que ce ne soit pas toujours vrai), l'utilisation de zéro comme argument devrait entraîner l'expiration immédiate de la session.

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 du manuel au lieu de la documentation officielle plus récente, car elle renvoie Statut HTTP 500 - Erreur de serveur interne avec message d'erreur

java.lang.IllegalStateException: getAttribute: Session already invalidated

Qu'est-ce qui se passe ici?Est-ce que ce bug de Glassfish 4.0 ou la documentation est erronée ?Ou peut-être existe-t-il une troisième option ?


PS.Ce code fonctionne comme il se doit avec des valeurs négatives (la session n'est pas invalidée) et j'utilise -1 au lieu de 0 dans mon code.Je suis juste intéressé par ce qui ne va pas 0.

Était-ce utile?

La solution

Le Spécification des servlets chapitre sur les états des délais d'expiration de session

Par définition, si la période de temps sortie pour une session est définie sur -1, la session n'expirera jamais.

Donc GlasshFish semble avoir couvert cela.Je ne trouve aucune référence dans la spécification indiquant que la même chose devrait être vraie pour une valeur de 0 avec setMaxInactiveInterval().Cependant, il est dit

Le session-config Définit les paramètres de session pour cette application Web.Le sous-élément session-timeout Définit l'intervalle de temps out de session par défaut pour toutes les sessions créées dans cette application Web.Le temps libre spécifié doit être exprimé en total de minutes. Si le délai d'attente est de 0 ou moins, le conteneur garantit que le comportement par défaut des sessions n'est jamais à l'heure.Si cet élément n'est pas spécifié, le conteneur doit définir sa période de temps libre par défaut.

Autres conseils

C'est déjà le temps mort et invalide

session.setMaxInactiveInterval(0); // mean inactive immediately

C'est donc un message d'erreur correct.(veuillez vous référer au livre tête première pour référence ultérieure.)

Vous essayez d'accéder à une valeur d'objet qui n'existe pas.c'est déjà détruit

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top