91 votes

Quel code d'état http est censé être utilisé pour indiquer au client que la session a expiré?

Dans une page web, il utilise YUI gestionnaire de connexion/source de données à envoyer une requête AJAX vers le serveur, si la session (qui contient les informations que l'utilisateur a été authentifié) a déjà expiré, ces réponses ajax qui ne peuvent être vues par les utilisateurs authentifiés doit renvoyer un code d'état http, dire au client que la session a déjà expiré, alors que le client soit simplement le redirige vers la page de connexion ou lui demande si il veut prolonger la session.

Ma question est que, dans cette situation, ce code d'état http est le plus approprié pour dire au client que la session a expiré?

Liste des codes de statut HTTP de wiki

80voto

Iain Collins Points 2296

Du mieux que je peux suggérer, c'est un code d'état HTTP 401 à-tête WWW-Authenticate.

Le problème avec 403 demandes de est le la RFC 2616 membres de "l'Autorisation ne sera pas l'aide et de la demande ne DOIT PAS être répété." (c'est à dire n'a pas d'importance si vous êtes authentifié ou non, vous n'allez pas obtenir l'accès à cette ressource, jamais).

Le problème avec 401 demandes en est-il des états qu'ils "DOIVENT inclure un WWW-Authenticate champ d'en-tête". Comme quelqu'un l'a noté , il ne semble pas être en violation de la spec pour utiliser une valeur personnalisée en-tête WWW-Authenticate.

Je ne vois aucune raison dans la RFC 2617 pourquoi HTTP 401 statut combiné avec un custom-tête WWW-Authenticate comme ce ne serait pas d'accord:

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

Le protocole oAuth spec semble effectivement de le faire, comme ils recommandent cette (bien qu'ils ont à mon avis une étrange interprétation de la RFC):

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

Ce ne semble pas être expressément SANCTIONNÉ par le RFC, mais je ne peut pas voir que c'est interdit par elle (elle ne semble pas en conflit avec l'un DOIT ou ne DOIT PAS, devrait ou ne DEVRAIT PAS).

Je souhaite leur était plus spécifiques, code d'état HTTP délais d'attente et pour des choses comme les jetons CSRF étant invalide, donc c'était plus clair.

40voto

Jonathon Hill Points 1258

Je recommanderais HTTP 401.

Alors qu'une 403 dit en gros, "Vous n'êtes pas autorisé, partez et ne revenez pas", 401 dit, "Nous ne savons pas si vous êtes autorisé ou non parce que vous n'avez pas d'apporter votre carte d'identité. Vas-y et essayez à nouveau."

Comparer Wikipédia définitions:

HTTP 403 - La demande est une demande légale, mais le serveur refuse d'y répondre.

HTTP 401 - Semblable à 403 Forbidden, mais spécifiquement pour une utilisation lorsque l'authentification est possible, mais n'a pas ou pas encore été fournis.

19voto

John Reichert Points 101

Ce sujet 419 - il n'est pas standard, mais la description sur Wikipédia semble correspondre à:

419 L'Authentification De Délai D'Attente

Pas une partie de la HTTP standard, 419 Authentification Timeout indique qui, auparavant, d'authentification valide a expiré. Il est utilisé comme un alternative à 401 non autorisé, afin de se différencier de sinon, les clients authentifiés se voir refuser l'accès de serveur spécifique les ressources.

12voto

Jason Points 1745

Je crois que le code approprié va être 403 / Forbidden. Il n'y en a pas qui soient directement liés aux sessions.

9voto

Dermot Doherty Points 189

La vérité est, il n'y a pas de code de statut HTTP pour un délai d'expiration de session. Les Sessions sont mises en œuvre dans la couche d'application, pas le HTTP couche de transport.

Il y a un code d'état personnalisé que Microsoft ont été à l'aide d'expiration de la session: 599, ou simplement faire votre propre code d'état dans le 5xx gamme.

À partir de l'État des Codes Wiki:

599 Réseau de se connecter erreur de dépassement de délai (Inconnu) Ce code d'état n'est pas spécifié dans tout les Rfc, mais il est utilisé par Microsoft Corp proxy HTTP pour signaler un réseau connect timeout derrière le proxy à un client en face de la procuration.

J'utilise le code d'état personnalisé 599 pour un délai d'expiration de session, puis vérifier dans la réponse AJAX.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X