php - Welcher HTTP-Statuscode soll verwendet werden, um dem Client mitzuteilen, dass die Sitzung abgelaufen ist?




ajax yui (6)

Am besten kann ich einen HTTP 401-Statuscode mit einem WWW-Authenticate-Header vorschlagen.

Das Problem mit 403 Anfragen ist die RFC 2616 Staaten "Autorisierung wird nicht helfen und die Anfrage sollte nicht wiederholt werden." (Es spielt keine Rolle, ob Sie authentifiziert sind oder nicht, Sie werden niemals Zugang zu dieser Ressource erhalten).

Das Problem mit 401- Anfragen ist, dass sie "ein WWW-Authenticate-Header-Feld enthalten müssen". Wie jemand bemerkt hat, scheint es keinen Verstoß gegen die Spezifikation zu sein, einen benutzerdefinierten Wert in einem WWW-Authenticate-Header zu verwenden.

Ich kann keinen Grund in RFC 2617 sehen, warum ein HTTP 401-Status in Kombination mit einem benutzerdefinierten WWW-Authenticate-Header wie diesem nicht in Ordnung wäre:

WWW-Authenticate: MyAuthScheme realm="http://example.com"

Die oAuth-Spezifikation scheint genau dies zu tun, da sie dies empfiehlt (obwohl sie eine merkwürdige Interpretation des RFC haben):

WWW-Authenticate: OAuth realm="http://server.example.com/"

Dies scheint nicht spezifisch durch den RFC SANCTIONED zu sein, aber ich kann nicht wirklich sehen, dass es von ihr verboten ist (es scheint nicht mit irgendeinem MUSS in Konflikt zu stehen oder MUSS NICHT, SOLLTE oder SOLLTE NICHT BEDINGEN).

Ich wünschte, es gäbe einen spezifischeren HTTP-Statuscode für Timeouts und Dinge wie CSRF-Tokens wären ungültig, also war das klarer.

In einer Webseite verwendet es den YUI-Verbindungsmanager / die Datenquelle, um AJAX-Anfragen an den Server zu senden, wenn die Sitzung (die die Information enthält, ob der Benutzer authentifiziert wurde) bereits abgelaufen ist, welche Ajax-Antworten nur authentifiziert werden können Benutzer sollten einen HTTP-Statuscode zurücksenden, der dem Client mitteilt, dass die Sitzung bereits abgelaufen ist, dann leitet der Client ihn entweder auf die Anmeldeseite um oder fragt ihn, ob er die Sitzung verlängern möchte.

Meine Frage ist, dass in dieser Situation welcher HTTP-Statuscode am besten geeignet ist, um dem Client mitzuteilen, dass die Sitzung abgelaufen ist?

Liste der HTTP-Statuscodes aus Wiki


Code 408. "Request Timeout", scheint perfekt - RFC 2616 erklärt es bedeutet

Der Client hat innerhalb der Zeit, zu der der Server bereit war zu warten, keine Anforderung generiert.

dh genau eine "Auszeit", genau wie Sie es wünschen!


Ich glaube, der entsprechende Code wird 403 / Verboten sein. Es gibt keine, die direkt mit Sitzungen zusammenhängen.


Ich würde ein HTTP 401 empfehlen.

Während ein 403 im Grunde sagt: "Du darfst nicht gehen, geh nicht zurück und komm nicht zurück", sagt ein 401: "Wir wissen nicht, ob es dir erlaubt ist oder nicht, weil du deine ID nicht mitgebracht hast hol es dir und versuche es noch einmal. "

Vergleichen Sie die Wikipedia Definitionen :

HTTP 403 - Die Anfrage war eine legale Anfrage, der Server verweigert jedoch die Antwort.

HTTP 401 - Ähnlich wie 403 verboten, aber speziell für den Fall, dass eine Authentifizierung möglich ist, aber fehlgeschlagen ist oder noch nicht bereitgestellt wurde.


Laut dem Wikipedia Link von Http Status Codes von Bobo:

440 Login Timeout (Microsoft)

    A Microsoft extension. Indicates that your session has expired.

Technisch gesehen ist die akzeptierte Antwort korrekt: Wenn Sie bereits sicher sind, dass Sie die Anforderung nicht erfüllen werden und Sie fragen, welcher Fehlercode zurückgegeben werden soll, ist HTTP 401 "Nicht autorisiert (nicht authentifiziert)" geeignet um die erneute Authentifizierung zu veranlassen.

Aber stellen Sie sich zunächst einmal die Frage: Sollten Sie die Anfrage nicht bestehen?

Berücksichtigen Sie, dass der Benutzer möglicherweise nur eine öffentliche Seite Ihrer Website besucht. In diesem Fall werden Sie mit einem "Unauthorized!" Nachricht, und erfordern sie Neuauthentifizierung, um eine Seite zu sehen, die sie normalerweise ohne Authentifizierung sehen könnten. Das ist nicht cool.

Mein Rat ist, die Tatsache zu ignorieren, dass das Sitzungstoken unbekannt ist, und einfach fortzufahren, um ein neues Sitzungstoken zu generieren und eine neue Sitzung dafür zu erstellen. Der anfängliche Status der Sitzung wird natürlich "noch nicht authentifiziert" sein. Wenn der Benutzer also versucht, auf eine nicht öffentliche Seite zuzugreifen, wird die Seite dafür sorgen, dass sie ein HTTP 401 "Unauthorized (Unauthenticated)" erhält. "und muss authentifizieren. Wenn der Benutzer jedoch auf einer öffentlichen Seite landet, werden sie nichts anderes bemerken.





http-status-codes