Session-timeout-Verwirrung - Sitzung.setMaxInactiveInterval(0)

Ich bin neu in JEE und dies ist es, was mich verwirrt. Nach HttpSession.html#setMaxInactiveInterval(int interval) Dokumentation

Einer interval Wert von zero oder weniger zeigt an, dass die Sitzung sollte nie timeout.

aber laut meinem lehrbuch (das ist schon einige Jahre alt - daher erwarte ich, dass es nicht immer rechts) mit null als argument sollte dazu führen, dass session-timeout sofort.

Dieser 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

    }
}

verwendet auf Glassfish 4.0 scheint zu bestätigen, dass die Theorie aus dem lehrbuch, anstatt neuere, offizielle Dokumentation, da gibt es HTTP Status 500 - Internal Server Error mit Fehlermeldung

java.lang.IllegalStateException: getAttribute: Session already invalidated

Was ist hier Los? Ist dies Glassfish 4.0 bug oder Dokumentation ist falsch? Oder vielleicht gibt es eine Dritte option?


PS. Dieser code funktioniert so wie es soll mit negativen Werten (- Sitzung ist, nicht für ungültig erklärt) und ich bin mit -1 statt 0 in meinem code. Ich bin einfach nur interessiert was ist Los mit 0.

Der code funktioniert auf Tomcat 7. Versuchen Sie, mit -1.
Danke. -1 funktioniert gut und da scheint es sicherer zu machen, verwende ich es statt 0. Ich bin einfach nur neugierig, was ist falsch mit null.
Was passiert, wenn Sie die session-config session-timeout Wert 0 in web.xml?
Wenn ich entfernen session.setMaxInactiveInterval(0); von code und verwenden Sie <session-config><session-timeout>0</session-timeout></session-config> im web.xml es scheint zu funktionieren gut (session wird nicht zerstört). Was ist interessant session.getMaxInactiveInterval() zurück -60 (in Sekunden), so scheint es, dass der Wert session-timeout umgewandelt -1 (in Minuten)
Ja, die config ist in Minuten, während setMaxInactiveInterval ist in Sekunden.

InformationsquelleAutor JEENoob | 2014-01-11

Schreibe einen Kommentar