[php] 클라이언트에게 세션 시간이 초과되었음을 알리기 위해 어떤 http 상태 코드를 사용해야합니까?

웹 페이지에서 YUI 연결 관리자 / 데이터 소스를 사용하여 AJAX 요청을 서버에 보냅니다. 세션 (사용자 인증 여부에 대한 정보 포함)이 이미 시간 초과 된 경우 인증 된 사용자 만 볼 수있는 AJAX 응답 사용자는 http 상태 코드를 반환하여 클라이언트에게 세션이 이미 시간 초과되었음을 알리고 클라이언트는 단순히 로그인 페이지로 리디렉션하거나 세션을 연장 할 것인지 묻습니다.

내 질문은이 상황에서 클라이언트에게 세션이 시간 초과되었음을 알리는 데 가장 적합한 http 상태 코드는 무엇입니까?

Wiki의 HTTP 상태 코드 목록



답변

내가 제안 할 수있는 최선의 방법은 WWW-Authenticate 헤더가있는 HTTP 401 상태 코드입니다.

403 요청 의 문제 는 RFC 2616이 “승인이 도움이되지 않으며 요청을 반복해서는 안됩니다.”라고 말합니다. (즉, 인증 여부는 중요하지 않습니다. 해당 리소스에 액세스 할 수 없습니다.)

401 요청 의 문제점 은 “WWW-Authenticate 헤더 필드를 포함해야합니다”라는 것입니다. 마찬가지로 누군가가 언급 한 WWW 인증 헤더에 사용자 정의 값을 사용할 수있는 사양을 위반 한 것으로 표시되지 않습니다.

RFC 2617 에서 HTTP 401 상태가 사용자 지정 WWW-Authenticate 헤더와 결합 된 상태 가 좋지 않은 이유를 알 수 없습니다 .

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

의 OAuth 스펙 (그들은 내 마음은 RFC의 이상한 해석이 있지만) 그들이이 추천으로 실제로, 다만이 작업을 수행 할 것 같다 :

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

이것은 RFC에 의해 특별히 제재 된 것으로 보이지는 않지만 실제로 금지되어 있다는 것을 알 수 없습니다 (MUST 또는 NOT, SHOULD 또는 SHOULD NOT 조건과 충돌하지 않는 것 같습니다).

시간 초과 및 CSRF 토큰이 유효하지 않은 것과 같은 것에 대한보다 구체적인 HTTP 상태 코드가 있었으면 좋겠습니다.


답변

HTTP 401을 권장합니다.

403은 기본적으로 “허용되지 않는다, 떠나고 돌아 오지 마라”라고 말하는 반면, 401은 “당신이 신분증을 가져 오지 않았기 때문에 당신이 허락되는지 아닌지 모른다. 그것을 얻고 다시 시도하십시오. “

Wikipedia의 정의 비교 :

HTTP 403- 요청이 합법적 인 요청 이었지만 서버가 응답을 거부하고 있습니다.

HTTP 401-403 금지와 유사하지만 특히 인증이 가능하지만 실패했거나 아직 제공되지 않은 경우에 사용됩니다.


답변

419는 어떻습니까-표준은 아니지만 Wikipedia설명은 적합합니다.

419 인증 시간 초과

HTTP 표준의 일부가 아닌 419 인증 시간 초과는 이전에 유효한 인증이 만료되었음을 나타냅니다. 특정 서버 리소스에 대한 액세스가 거부되는 인증 된 클라이언트와 구별하기 위해 401 Unauthorized의 대안으로 사용됩니다.


답변

적절한 코드가 403 / 금지 될 것이라고 생각합니다. 세션과 직접적으로 관련된 것은 없습니다.


답변

사실, 세션 시간 초과에 대한 표준 HTTP 상태 코드가 없습니다. 세션은 HTTP 전송 계층이 아닌 애플리케이션 계층에서 구현됩니다.

Microsoft가 세션 시간 제한에 대해 사용했던 사용자 지정 상태 코드 : 599 또는 5xx 범위에서 사용자 고유의 상태 코드를 구성하십시오.

상태 코드 위키에서 :

599 네트워크 연결 시간 초과 오류 (알 수 없음)이 상태 코드는 RFC에 지정되어 있지 않지만 Microsoft Corp. HTTP 프록시에서 프록시 뒤의 네트워크 연결 시간 초과를 프록시 앞의 클라이언트에 알리는 데 사용됩니다.

세션 시간 제한에 사용자 지정 상태 코드 599를 사용한 다음 AJAX 응답에서 확인합니다.


답변

Bobo가 위에서 제공 한 Http 상태 코드 의 Wikipedia 링크에 따라 :

440 Login Timeout (Microsoft)

    A Microsoft extension. Indicates that your session has expired.


답변

링크를 게시 할 때 해당 링크에서이 HTTP 상태 코드 440을 찾았습니다 . 세션 만료에 대해 440 HTTP 상태 코드를 사용할 수 있습니다.

440 로그인 시간 초과

 The client's session has expired and must log in again.

401 Unauthorized 사용자 로그인 자격 증명이 잘못되었을 때 사용할 수 있습니다. 또는 헤더에 전달 된 인증 토큰이 잘못되었습니다.

403 금지됨 사용자에게 요청 된 리소스에 대한 특정 권한이 없을 때 사용할 수 있습니다.

그래서 제 생각에는 440 Login Time-out을 사용해야 합니다 .