2010-11-24 15 views
2

Nach dem Abmelden, wenn ich die Zurück-Taste im Browser drücke, sollte es nicht die vorherige Seite anzeigen, es muss zur Standardseite gehen (nur Login-Seite).Verhindern der Zurück-Aktion nach dem Abmelden

So habe ich in vielerlei Hinsicht (Ruby on Rails-Anwendung) wie "history.forward()", "onbeforeunload", Cache in Meta-Tag ablaufen, "http://www.brookebryan.com/ Zurück Schaltfläche Erkennung "so viele .. ich bin sehr verwirrt.

Kann jemand eine Lösung vorschlagen?

+0

Sie haben eine bessere Chance auf eine Antwort, wenn Sie den „Ruby on Rails“ Tag zu Ihrer Frage hinzufügen. –

+0

hinzugefügt das Ruby-on-Rails-Tag. – Philipp

+1

verwenden Sie "Sitzungen" in Ihrer App, wenn ja, dann überprüfen Sie die "Sitzung" für jede sichere Seiten .. – FosterZ

Antwort

1

Sie können dies nicht und aus einem sehr guten Grund tun. Wenn es möglich wäre, die Zurück-Schaltfläche zu deaktivieren, würden bösartige Websites alle dazu beitragen, dass Sie nicht fortkommen. Es ist sowieso keine gute Idee, grundlegende Funktionen für Ihre Benutzer zu deaktivieren.

Wenn Sie all das sagen, können Sie die Verwendung der Zurück-Schaltfläche ablehnen. Wenn Sie Ihre Abmeldeschaltfläche POST ein Formular POST machen und dann direkt auf den POST antworten (anstatt weiterzuleiten), wird der Benutzer eine Warnung vom Browser erhalten, in der er gefragt wird, ob er das Formular erneut senden möchte.

Ich nehme an, ein weiterer Trick wäre für Ihre Seite (die, die Sie nicht möchten, dass der Benutzer zurückgehen kann), um eine AJAX-Anfrage auf den Server zu laden. Wenn die Antwort von dieser Unteranfrage anzeigt, dass der Benutzer nicht mehr eingeloggt ist, könnte Ihr Javascript den Benutzer auf eine andere Seite prellen.

All dies scheint mir eine Zeitverschwendung, um ehrlich zu sein.

1

Der beste Weg, dies zu tun, ist nicht den Browser zu steuern, sondern das Verhalten Ihrer Anwendung zu steuern.

In Ihrem Controller, setzen diese:

before_filter :validate_user 

und in Ihrer validate_user Methode, festzustellen, ob Sie einen angemeldeten Benutzer haben (nicht detailliert genug vorsah Code für diese zu sehen). Wenn kein angemeldeter Benutzer vorhanden ist, leiten Sie sie zur Anmeldeseite um.

Dies ist ein sehr allgemeines Idiom; Ich sehe es die ganze Zeit. Möglicherweise möchten Sie die Quelle einiger Rails-Apps untersuchen. Hier ist die application_controller für Redmine, ein Issue Tracker. Es enthält einen before_filter namens user_setup, der zu einer find_current_user-Methode führt, die ein Benutzerobjekt aus der Sitzung findet oder versucht, den Benutzer auf verschiedene Arten zu authentifizieren.

+0

Dies berücksichtigt nicht den Browser-Cache. Ich nahm an, dass er vermeiden wollte, dass die vorherige Seite auch ohne eine Anfrage an den Server gesehen wurde. – noodl

+3

Fügen Sie dann zusätzlich zu oben einen Header "Cache-Control: no-cache" hinzu. –

3

Was Sie tun müssen, ist das Browser-Caching zu deaktivieren, so dass es die zwischengespeicherte Seite nicht zurückgibt, nachdem Sie sich von der Seite abmelden. Sie können das tun, indem Sie den Antwortheader festlegen, um das Zwischenspeichern in Anwendungscontroller zu vermeiden. Wie?

in 'application_controller.rb' ..... 

before_filter :set_no_cache 

def set_no_cache 
    response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate" 
    response.headers["Pragma"] = "no-cache" 
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT" 
end 

Wie in dieser Antwort erwähnt: https://stackoverflow.com/a/748646

Verwandte Themen