Hallo an alle,
ich habe ein kleines Problem beim Sessionmanagement mit Tomcat das ich nicht verstehe. Ich habe eine Applikation mit Java Server Pages und Servlets geschrieben. Am Anfang muß sich der benutzer anmelden, eine Session wird initiert. Am Anfang jeder jsp und jedes Servlets frage ich die Gültigkeit der Session ab um zu verhindern, dass das Programm einen Stacktrace ausgibt wenn die Session abgelaufen ist.
Das funktioniert auch in 99% wunderbar, ich habe jedoch immer wieder Clients, die mittendrin die Session verlieren und dann immer wieder auf die Anmeldeseite zurück kommen.
Hier mein Code:
Dieses Servlet wird vom Login Screen aufgerufen. Am Anfang initiiere ich eine neue Session
Jede jsp Seite enthält am Anfang diesen Teil
Dies ist dann die Datei sessionexpired.jsp
Bei Servlets sieht es so aus
Wer hat eine Idee was ich hier falsch mache. Wie gesagt, der Fehler tritt nur sporadisch und nicht nachvollziehbar auf. Mit dem betroffenen Client hat man dann auch keine Chance mehr weiterzuarbeiten. Er wird immer wieder auf die Loginseite zurück geleitet. Provozieren kann ich das Verhalten in dem ich am Client das Session Cookie lösche.
Vielen Dank
Richard Wimmer
ich habe ein kleines Problem beim Sessionmanagement mit Tomcat das ich nicht verstehe. Ich habe eine Applikation mit Java Server Pages und Servlets geschrieben. Am Anfang muß sich der benutzer anmelden, eine Session wird initiert. Am Anfang jeder jsp und jedes Servlets frage ich die Gültigkeit der Session ab um zu verhindern, dass das Programm einen Stacktrace ausgibt wenn die Session abgelaufen ist.
Das funktioniert auch in 99% wunderbar, ich habe jedoch immer wieder Clients, die mittendrin die Session verlieren und dann immer wieder auf die Anmeldeseite zurück kommen.
Hier mein Code:
Dieses Servlet wird vom Login Screen aufgerufen. Am Anfang initiiere ich eine neue Session
Java:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
RequestDispatcher rd = null;
// Alte Session löschen
try
{
request.getSession(false).invalidate();
request.getSession(true);
} catch (RuntimeException e)
{
rd = this.getServletContext().getRequestDispatcher("/b/noCoockie.html"); //$NON-NLS-1$ //$NON-NLS-2$
rd.forward(request, response);
return;
}
System.out.println("ID: " + request.getSession(false).getId());
//Weiterer Code zur Validierung des Login
}
Jede jsp Seite enthält am Anfang diesen Teil
Java:
<head>
<jsp:include page="../layout/sessionexpired.jsp" />
Dies ist dann die Datei sessionexpired.jsp
Java:
<%
if (!request.isRequestedSessionIdValid())
{
out.println("<meta http-equiv='refresh' content='0; URL=/ipk/sessionexpired.html'>");
out.flush();
}
%>
Bei Servlets sieht es so aus
Java:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
// Gültigkeit der Session abfragen und ggf. auf die Anmeldeseite zurück
RequestDispatcher rd = this.getServletContext().getRequestDispatcher("/sessionexpired.html");
if (!request.isRequestedSessionIdValid())
{
rd.forward(request, response);
return;
}
Wer hat eine Idee was ich hier falsch mache. Wie gesagt, der Fehler tritt nur sporadisch und nicht nachvollziehbar auf. Mit dem betroffenen Client hat man dann auch keine Chance mehr weiterzuarbeiten. Er wird immer wieder auf die Loginseite zurück geleitet. Provozieren kann ich das Verhalten in dem ich am Client das Session Cookie lösche.
Vielen Dank
Richard Wimmer