1. ホーム
  2. php

[解決済み] セッションがタイムアウトしたことをクライアントに伝えるには、どのような http ステータスコードを使用することになっていますか?

2023-05-11 06:05:10

質問

ウェブページでは、YUIコネクションマネージャ/データソースを使用してサーバーにAJAXリクエストを送信していますが、セッション(ユーザーが認証されたかどうかの情報を含む)がすでにタイムアウトしている場合、認証されたユーザーのみが閲覧できるこれらのAjax応答はhttpステータスコードを返し、セッションがすでにタイムアウトしたことをクライアントに伝え、クライアントは単にログインページにリダイレクトするか、セッションを延長したいかどうかを尋ねるはずです。

私の質問は、この状況で、セッションがタイムアウトしたことをクライアントに伝えるのに、どのような http ステータス コードが最も適切なのか、ということです。

HTTPステータスコードのリスト(wikiより

どのように解決するのですか?

私が提案できる最善の方法は、HTTP 401 ステータスコードに WWW-Authenticate ヘッダを付けることです。

の問題は 403 リクエストの問題点は RFC 2616 は "Authorization will not help and the request SHOULD NOT be repeated." (つまり、認証されているかどうかは関係なく、そのリソースへのアクセスを得ることはできない) と述べています。

の問題は 401 リクエストの問題は、それが "MUST include a WWW-Authenticate header field" と述べていることです。そのため は、誰かが指摘したように のように、WWW-Authenticate ヘッダーにカスタム値を使用することは、仕様違反ではないようです。

に何の理由も見当たりません。 RFC 2617 HTTP 401 ステータスとカスタムの WWW-Authenticate ヘッダを組み合わせても問題ない理由が見当たりません。

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

この oAuth仕様 は実際にこれを推奨しているようです (ただし、私の目には RFC の奇妙な解釈として映っています)。

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

これは RFC で特に SANCTIONED になっているようには見えませんが、実際には RFC で禁止されているようには見えません (MUST や MUST NOT、SHOULD や SHOULD NOT のどの条件とも衝突しないように見えます)。

タイムアウトや、CSRF トークンが無効であることなどについて、より具体的な HTTP ステータス コードがあれば、この点が明確になるのにと思います。