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 vonzero
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
.
-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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Servlet-Spezifikation Kapitel über Session-Timeouts Staaten
So GlasshFish zu haben scheint, bedeckt. Ich kann nicht finden jede Bezugnahme in die Spezifikation, die sagt, dass das gleiche sollte wahr sein, für einen Wert von
0
mitsetMaxInactiveInterval()
. Aber es sagt, dass0
ist nicht definiert in der Spezifikation fürsetMaxInactiveInterval
aber nur für<session-config>
Glassfish implementiert ihn richtig (aber nicht perfekt nach JavaDoc), so ist es kein bug. Trotzdem geben Sie wahrscheinlich am besten beantworten, die nicht-Glas-Fisch-emploee geben könnte, so akzeptiere Ihre Antwort. Tank Sie wieder.InformationsquelleAutor Sotirios Delimanolis
Dieser schon Zeit aus und schließen
Also das ist die richtige Fehlermeldung. (bitte Kopf erste Buch zum nachlesen.)
Sie versuchen, Zugriff auf Objekt-Wert, die ist nicht vorhanden. es ist bereits zerstört
0
Sitzung für ungültig erklärt werden, sofort, aber in der offiziellen Dokumentation docs.oracle.com/javaee/7/api/javax/servlet/http/... können wir Lesen, dass "Ein interval-Wert von null oder weniger zeigt an, dass die session-timeout sollte nie.", das war die Quelle meiner Verwirrung.InformationsquelleAutor charitha