Bei dieser Frage geht es nicht darum, wann GET oder POST im Allgemeinen verwendet werden soll. Es handelt sich um die empfohlene Methode zum Abmelden von einer Webanwendung. Ich habe viele Informationen über die Unterschiede zwischen GET und POST im allgemeinen Sinne gefunden, aber für dieses spezielle Szenario keine eindeutige Antwort gefunden.
Als Pragmatiker neige ich dazu, GET zu verwenden, da die Implementierung viel einfacher ist als POST. Lass einfach einen einfachen Link fallen und du bist fertig. Dies scheint bei der überwiegenden Mehrheit der Websites der Fall zu sein, an die ich denken kann, zumindest von oben. Sogar der Stapelüberlauf übernimmt das Abmelden mit GET.
Was mich zögern lässt, ist das (wenn auch alte) Argument, dass einige Webbeschleuniger / Proxys Seiten vorab zwischenspeichern, indem sie jeden auf der Seite gefundenen Link abrufen, sodass der Benutzer eine schnellere Antwort erhält, wenn er darauf klickt. Ich bin nicht sicher, ob dies noch zutrifft, aber wenn dies der Fall wäre, würde theoretisch ein Benutzer mit einem dieser Beschleuniger aus der Anwendung geworfen, sobald er sich anmeldet, da sein Beschleuniger die Abmeldung finden und abrufen würde Link, auch wenn sie nie darauf geklickt hat.
Alles, was ich bisher gelesen habe, schlägt vor, POST für "destruktive Aktionen" zu verwenden, während Aktionen, die den internen Status der Anwendung nicht ändern - wie Abfragen und dergleichen - mit GET behandelt werden sollten . Auf dieser Grundlage lautet die eigentliche Frage hier:
Wird das Abmelden von einer Anwendung als destruktive Aktion angesehen / ändert sich der interne Status der Anwendung?
quelle
Antworten:
Verwenden Sie
POST
.Im Jahr 2010 war die Verwendung
GET
wahrscheinlich eine akzeptable Antwort. Aber heute (2013) werden Browser Seiten vorab abrufen, von denen sie glauben, dass Sie sie als nächstes besuchen werden.Hier ist einer der StackOverflow-Entwickler, der auf Twitter über dieses Problem spricht:
Unterhaltsame Tatsache: StackOverflow diente zum Abmelden über GET, aber nicht mehr.
quelle
In REST sollte es keine Sitzung geben, daher gibt es nichts zu zerstören. Ein REST-Client authentifiziert sich bei jeder Anforderung. Angemeldet oder abgemeldet ist nur eine Illusion.
Was Sie wirklich fragen, ist, ob der Browser die Authentifizierungsinformationen bei jeder Anfrage weiter sendet.
Wenn Ihre Anwendung die Illusion erzeugt, angemeldet zu sein, sollten Sie sich möglicherweise mit Javascript "abmelden" können. Keine Hin- und Rückfahrt erforderlich.
Fielding Dissertation - Abschnitt 5.1.3
quelle
httponly
gespeichert, das mit dem Attribut gekennzeichnet ist, um einige xss-Risiken zu vermeiden. Dies bedeutet, dass sie nur vom Server zurückgesetzt werden können (ohne das Cookie manuell zuEine Möglichkeit,
GET
die hier missbraucht werden könnte, besteht darin, dass eine Person (Konkurrent vielleicht :) ein Bild-Tag mitsrc="<your logout link>"
ÜBERALL im Internet platziert hat. Wenn ein Benutzer Ihrer Website auf diese Seite stößt, wird er unwissentlich abgemeldet.quelle
/logout
URLs in versteckte Bilder laden ) und es funktioniert.Um richtig zu sein, sind GET / POST (oder andere Verben) Aktionen für eine Ressource (adressiert durch URL) - es geht also im Allgemeinen um den Status der Ressource und nicht um den Anwendungsstatus als solchen. In wahrer Stimmung sollten Sie also eine URL haben, z. B.
[host name]\[user name]\session
'LÖSCHEN' wäre das richtige Verb für die Abmeldeaktion.Die Verwendung
[host name]\bla bla\logout
als URL ist nicht wirklich ein REST-Vollweg (IMO). Warum also über die korrekte Verwendung von GET / POST debattieren?Natürlich verwende ich GET auch für eine Abmelde-URL in meinen Anwendungen :-)
quelle
Das Abmelden hat nichts mit der Anwendung selbst zu tun. Es ändert den Status des Benutzers in Bezug auf die Anwendung. In diesem Fall basiert Ihre Frage anscheinend eher darauf, wie der Befehl vom Benutzer initiiert werden soll, um diese Aktion zu starten. Da dies keine "destruktive Aktion" ist und sicher ist, dass die Sitzung abgebrochen oder zerstört wird, aber weder Ihre Anwendung noch Ihre Daten geändert werden, ist es nicht unmöglich, beiden Methoden zu erlauben, einen Abmeldevorgang einzuleiten. Der Beitrag sollte von allen vom Benutzer initiierten Aktionen verwendet werden (z. B. - Benutzer klickt auf "Abmelden"), während get für von der Anwendung initiierte Abmeldungen reserviert werden kann (z. B. - eine Ausnahme, die potenzielle Benutzereingriffe erkennt und mit einem Abmelde-GET zwangsweise zur Anmeldeseite umleitet ).
quelle
Hallo aus meiner Sicht, wenn Sie sich anmelden, überprüfen Sie Benutzername / Passwort und wenn diese übereinstimmen, erstellen Sie das Anmeldetoken.
CREAT-Token => Methode POST
Wenn Sie sich abmelden, zerstören Sie das Token, daher sollte für mich die logischste Methode ein LÖSCHEN sein
DELETE-Token => Methode DELETE
quelle
Das Szenario des Pre-Caching ist interessant. Aber ich vermute, wenn sich viele Websites nicht darum kümmern, sollten Sie es vielleicht auch nicht tun.
Oder könnte der Link in Javascript implementiert werden?
Bearbeiten: Soweit ich weiß, sollte ein GET technisch für schreibgeschützte Anforderungen sein, die den Anwendungsstatus nicht ändern. Ein POST sollte für Schreib- / Bearbeitungsanforderungen sein, die den Status ändern. Andere Anwendungsprobleme bevorzugen jedoch möglicherweise GET gegenüber POST für einige Statusänderungsanforderungen, und ich glaube nicht, dass dies ein Problem darstellt.
quelle
Wenn Sie Ihre Webanwendung die Sitzung über ein Abmeldeskript abbrechen lassen, benötigen Sie dies normalerweise auch nicht. Normalerweise gibt es eine Sitzungsvariable, die für die Sitzung, die Sie abbrechen möchten, eindeutig ist.
quelle
Vor kurzem habe ich an einem Projekt gearbeitet, bei dem ich mich mit GET abmelde. Nachfolgend finden Sie den Code in Nodejs Express, der einwandfrei funktioniert
Ihre router.js
Ihr controller.js
quelle
Ich sehe nicht, wie das Abmelden (Erhöhen der Benutzerberechtigungen) eine zerstörerische Aktion ist. Dies liegt daran, dass die Aktion "Abmelden" nur für Benutzer verfügbar sein sollte, die bereits angemeldet sind. Andernfalls wäre sie veraltet.
Eine zufällig generierte Zeichenfolge in Ihren Browser-Cookies repräsentiert Ihre Benutzersitzung. Es gibt unzählige Möglichkeiten, es zu zerstören. Eine effektive Abmeldung ist lediglich ein Service für Ihren Besucher.
quelle
wget
Im Spider-Modus mit einem korrekten Sitzungscookie in einem privaten Wiki musste ich das eigentlich einmal machen. Natürlich war eine der ersten gecrawlten URLs/logout
./logout
Seiten wirklich sind. Sie müssen sich beispielsweise erneut bei Google Mail anmelden, sich erneut beim Chat anmelden, Ihren Platz in Hangouts-Konversationen finden, die Sie gescrollt haben usw. - und dies gilt nur für Google.com.