Zuvor verwendet das Servlet response.sendRedirect("pages/my_page.jsp?foo=bar");
ohne Probleme. Sitzungsattribute können auf den nachfolgenden Seiten abgerufen werden, an die sie weitergeleitet werden.
Momentan ändere ich den Weg, um Anfragen zu senden. Ursprünglich verwendet das Javascript myForm.submit();
, aber ich habe es jetzt in jQuery.ajax("my_page.jsp?foo=bar", {...});
geändert. Dann enthält das Servlet eine URL in der JSON-Antwort anstelle von response.sendRedirect()
, und in der Funktion success
verwende ich window.location.replace(url);
, um zur neuen Seite zu navigieren. Die gespeicherten Sitzungsattribute können jedoch nicht auf nachfolgenden Seiten abgerufen werden.
Ich habe die Sitzungs-IDs verglichen, indem ich <%= session.getId() %>
in meine JSP-Seiten eingefügt habe. Sie sind gleich. Das Problem hier ist session.getAttribute("myAttribute_1")
gibt null
auf der Seite zurück, an die umgeleitet wurde.
Ich bin mir nicht sicher, ob das wichtig ist, aber ich mache diese Aufgabe tatsächlich mit mehr als 1 JSP-Seiten:
%Vor% Wie bekomme ich in diesem Fall die gespeicherten Sitzungsattribute in C.jsp
?
Unten ist das Code-Snippet, das ich verwende, um das Sitzungsattribut zu speichern.
%Vor%Unten ist das Code-Snippet zum Umleiten.
%Vor% Ich habe zurück zu response.sendRedirect("pages/my_page.jsp?foo=bar")
in meinem Servlet verwendet.
Auf der Client-Seite wird jQuery.ajax()
entfernt und die Funktion sendFormData()
wird wie folgt aktualisiert.
Immer wenn ich ein Formular abschicken möchte, wird ein click
Event-Handler angehängt. Es wird sendFormData(myOriginalForm);
anstelle von myOriginalForm.submit();
aufgerufen, da ich die zu sendenden Daten anpassen muss.
Nur mit diesen einfachen Änderungen funktioniert alles wieder.
Dennoch suche ich nach einer Erklärung für dieses seltsame Verhalten.
HTTP-Anfragen sind zustandslos und die Sitzungen werden auf verschiedene Arten wie
auf HTTP gelegthttp://host:port/path;session_id=12345
) Es liegt in der Verantwortung des Kunden sicherzustellen, dass er mit den vom Server erwarteten Mitteln an der Sitzung teilnimmt. Wenn der Server mithilfe der Java-Servlet-API implementiert wird, wird entweder der Cookie jsessionid oder der Abfrageparameter mit demselben Namen an die URL angehängt, der die Sitzungs-ID angibt.
Wenn der Client keine Cookies unterstützt, müssen Sie mithilfe der Java Servlet-API umleiten
eine URL, die von HttpServletResponse.encodeRedirectURL(String url)
erstellt wurde.
Um von einem Servlet umzuleiten, verwenden Sie HttpServletResponse.sendRedirect(String url);
.
Wenn Sie den Server mit Standard für HTTP-Weiterleitungen beantworten, wird Ihr Design vereinfacht. Jquery implementiert diese Standards und berücksichtigt daher HTTP 301 und 302 Antworten vom Server als hier dargestellt , so dass keine Redirect-Logik auf der Client-Seite benötigt werden sollte.
Ihr Client ist jquery und seine Ajax-Implementierung respektiert und wiederholt die Cookies, die für eine bestimmte Domain festgelegt wurden, wenn eine nachfolgende Anfrage an dieselbe Domain gesendet wird.
Wenn Sie auf eine andere Domain umleiten und jquery mit CORS Sitzungen arbeiten, fügen Sie xhrFields
zu Ihrer Anfrage hinzu:
nach diese Antwort
Tags und Links javascript java jquery session jsp