Wie gewaltsam erstellen Sie eine neue session in Java-Servlets
Ich bin die Speicherung von session-ids in der Datenbank an log in
Zeit. Das problem, das ich konfrontiert ist, dass, wenn ein anderer Benutzer sich anmeldet, nach dem ersten, in derselben Sitzung ist eingetragen in der DB und welcome username
noch spiegelt der name des einen, wer sich angemeldet hat zuerst, auf der gleichen Maschine. Ich will erstellen Sie eine neue session-id jedes mal, wenn ein Benutzer sich anmeldet, aber irgendwie scheint mein code nicht funktioniert.
HttpSession session = request.getSession();
String sessionID;
request.getSession(true);
sessionID = session.getId();
Hinweis: der obige code aufgerufen wird, wenn der Benutzer klicken Sie auf Login-button und den darin enthaltenen in einem servlet.
session-ID hat immer noch den alten Wert von session bis der alte abläuft standardmäßig. Das bedeutet, wenn 10 Benutzer meldet sich an, alle haben gleiche session-id und der gleichen herzlich willkommen name.
Brauchen kompetente Beratung von gurus hier:). Lassen Sie mich wissen, wenn ich bin, verpassen Sie keine details, die gestellt werden müssen.
Wenn ich -
if(session.isNew()){
System.out.println("New session created by default");
request.getSession(true);
sessionID = session.getId();
createTime = new Date(session.getCreationTime());
lastAccessTime = new Date(session.getLastAccessedTime());
initialtime = System.currentTimeMillis();
}else{
System.out.println("You have created a new session");
request.getSession().invalidate();
request.getSession(true);
sessionID = session.getId();
createTime = new Date(session.getCreationTime());
lastAccessTime = new Date(session.getLastAccessedTime());
initialtime = System.currentTimeMillis();
}
bekomme die folgende exception -
SEVERE: Servlet.service() for servlet LoginToApp threw exception
java.lang.IllegalStateException: getCreationTime: Session already invalidated
at org.apache.catalina.session.StandardSession.getCreationTime(StandardSession.java:1025)
at org.apache.catalina.session.StandardSessionFacade.getCreationTime(StandardSessionFacade.java:74)
at LoginToApp.doGet(LoginToApp.java:56)
at LoginToApp.doPost(LoginToApp.java:208)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1303)
at java.lang.Thread.run(Thread.java:595)
- Ich würde sagen, Ihr logout kaputt ist, dann. Oder Ihr login ein. Oder beides.
- Ich glaube nicht, Dave.Login ist nur eine html-Seite und alles, was behandelt wird in der servlet-hier.
- Wirklich? Hmm. Da normalerweise bei der Abmeldung würden Sie ungültig die aktuelle Sitzung (oder auf login, wenn Sie nicht auf Abmelden, oder Sie sollten führen Sie einfach den logout-code). Aber die session-ID ist nicht wirklich das gating Problem--was in der session ist das wichtigste. Und wenn Sie haben noch alte Daten in der session oder in der Datenbank, entweder Ihr login oder logout, ist kaputt (oder beides).
- Dave, fügte hinzu, mehr details in Frage zu stellen. Ich bin einverstanden mit Ihrem
invalidate
, bekomme aber die oben genannten Ausnahme. Ich bin nicht Abmelden. Einfach einloggen und wenn neue user sich einloggen will, klickt er erneut Einloggen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Legen Sie die
session
- variable auf die neue session: Sie versuchen zu arbeiten mit der alten, ungültig ein.getSession
und übersehensession
variable.Zuerst müssen Sie zur Invalidierung der session beim logout löscht die session im server und seine assosiated Daten.
Eigentlich die session-id wird gespeichert in der client-browser-cookie mit dem Namen jsessionid auch nach der Aufhebung der Sitzung, es bleibt in client -, sondern server gelöscht, so dass, wenn eine Benutzer-Anforderung mit einem abgelaufenen jsessionid Server weiß, dass die session ungültig ist,so schafft neues.
Also Ungültig ist wichtig beim logout.
Selbst wenn Sie wollen, um die Daten zu löschen von der aktuellen Sitzung in der client zum Zeitpunkt der Abmeldung. verwenden Sie den folgenden code.