Vor kurzem habe ich eine Buchkaufwebsite geschrieben. Beim Testen der Abmeldungsfunktion, die auf den Browser klickt, um den Browser zu aktualisieren, werden Sie feststellen, dass der Benutzer, der bereits angemeldet war, sich erneut angemeldet hat.
Nachdem ich lange nachgedacht habe, habe ich viele Lösungen online gefunden, aber die meisten online angegebenen Methoden bestehen darin, JS zum Anmeldung zu verwenden und Benutzer daran zu verbieten, auf den Browser zurückzukehren, um zurückzukehren.
Obwohl diese Methode machbar ist, löst sie dieses Problem im Hintergrund nicht wirklich. Es fühlt sich an, als würde man sich gegen Herren bewachen, aber nicht gegen Bösewichte.
Das Folgende ist die Methode, die Sie implementiert haben
Prinzip:
Klicken Sie nach dem Abmelden auf den Browser, um den Browser zu aktualisieren. Tatsächlich gibt der Browser die Informationen des ursprünglichen Formularformulars wieder.
Anmeldung bedeutet, die ursprüngliche Sitzung zu töten
// private void -logout (httpServletRequest -Anforderung, httpServletResponse -Antwort) auswirken, löst ServletException aus, IOException {httpSession session = request.getSession (); Request.SetAttribute ("SessionID", Session.getID ()); Session.removeAttribute ("Benutzer"); Session.invalidate (); response.sendredirect (request.getContextPath () + "/index.jsp"); } Beim Umleiten auf eine JSP -Seite nach dem Ausschreiben unterscheidet sich die generierte Sitzung von der ursprünglichen Sitzung (die Sitzung der JSP -Seite ist standardmäßig aktiviert)
Das heißt, nach dem Auszeichnen auf den Browser, um die Sitzung zu aktualisieren, ist eine neue Sitzung. Denken Sie aus dieser Perspektive über die Lösung nach.
Ich habe ein Datenstück in die ursprüngliche Sitzung eingelegt. Ich kann diese Daten zum ersten Mal erhalten, wenn ich mich angemeldet habe. Nachdem ich mich abgemeldet habe, ist die ursprüngliche Sitzung verschwunden. Klicken Sie auf den Browser, um zur Aktualisierung zurückzukehren. Es gibt keine Daten in der neuen Sitzung. Der erhaltene Wert ist null
Übereinstimmung mit den Daten in der ursprünglichen Sitzung mit dem neuen Sitzungswert. Einer hat einen Wert und der andere ist null. Die Übereinstimmung wird definitiv scheitern. Zu diesem Zeitpunkt können Sie eine benutzerfreundliche Eingabeaufforderung angeben und sich dem Benutzer erneut anmelden lassen.
Wie können die Daten in der ursprünglichen Sitzung nach dem Auszeichnen gespeichert werden (wenn die ursprüngliche Sitzung abgesagt wird, wird sie weg sein)? Erwägen Sie, dem Formular eine versteckte Domäne hinzuzufügen und die Daten in die ursprüngliche Sitzung in die versteckte Domäne einzulegen. Klicken Sie nach dem Abmelden auf den Browser, um zum Aktualisieren zurückzukehren. Der Browser übermittelt die Daten automatisch in der ursprünglichen Sitzung, ohne sie selbst manuell zu speichern (tatsächlich muss manuelles Speichern in den Kontext der ServletContext -Anwendung platziert werden, und ich habe es nie ausprobiert).
Ein bisschen ähnlich einer Lösung zu wiederholten Einreichungen von Formularen, aber die Daten in der ursprünglichen Sitzung können hier nicht beseitigt werden, da dieselbe Sitzung vor und nach dem Abmelden nicht dieselbe Sitzung ist.
Die Details sind wie folgt: In login.jsp
<%String token = new Random (). Nextlong ()+""; Session type = "text" name = "name"> </td> </tr> <tr> <td align = "rechts"> Kennwort: </td> <td> <Eingabe type = "passwart" name = "password"> </td> </tr> <tr> <tr> <td> </td> <td> <eingabe type> </table "</tdlg" name = "token" value = "$ {sesionscope.token}"> </form> Geben Sie im Servlet eine freundliche Eingabeaufforderung an und leiten Sie die Anmeldeseite um
HttpSession Session = Request.GetSession (); // Lösen Sie das Problem der wiederholten Anmeldung des Browsers nach dem Ausschreiben // Geben Sie ein verstecktes Eingabefeld an und erhalten Sie den Wert der versteckten Domäne im Hintergrund // Erstellen Sie den Browser, nachdem Sie sich angemeldet haben. Session.getAttribute ("Token"); String hidDentoken = request.getParameter ("Token"); if (! hidDentoken.equals (sessionToken)) {requestAtTribute ("meldung", "Sie haben sich angemeldet, bitte melden Sie sich erneut an und wenden Sie sich nach 2 Sekunden <meta http-equiv = 'refresh' content = 2; url =" + request. request.getRequestDispatcher ("/client/message.jsp"). Weiterleiten (Anfrage, Antwort); zurückkehren; } prüfen:
Einloggen
Klicken Sie nach dem Abmelden auf den Browser, um zur Aktualisierung zurückzukehren. Der Browser fordert, ob die Daten wiederhergestellt werden sollen.
Klicken Sie hier, um mich wiederzugeben
Dies löst das Problem, auf den Browser zu klicken, um den Benutzer zu aktualisieren und nach dem Abmelden erneut anzumelden.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.