지금 작업중인 응용 프로그램에는 세션 시간 초과 값이 있습니다. 사용자가이 값보다 오랫동안 상호 작용하지 않은 경우 다음 페이지를로드하려고하면 로그인하라는 메시지가 표시됩니다.
모든 요청은 AJAX 호출을 포함하는이 메커니즘을 통해 라우팅됩니다. 원래 우리는 로그인 페이지와 함께 200 헤더를 보내고 있었는데, 이는 200 응답이 전송되면 코드가 실행되기 때문에 AJAX에 몇 가지 문제가 발생하고 이러한 RPC 호출에서 다시 전송되는 대부분의 데이터는 평가되는 JSON 또는 원시 JavaScript입니다. 물어보세요 : |).
우리의 JSON 파서가 HTML 로그인 페이지를 소비하지 않기 때문에 401이 더 낫다고 제안했습니다 .. 🙂
그러나 spec을 읽을 때 WWW-Authenticate
필드도 전송되어야 한다는 것을 알았 습니다.
이 필드에 적합한 값은 무엇입니까? 윌 Application Login
충분?
답변
HTTP 기본 인증을 표시 할 때 다음과 같은 내용을 반환합니다.
WWW-Authenticate: Basic realm="myRealm"
반면 Basic
에 계획과 나머지는 그 계획에 크게 의존합니다. 이 경우 영역은 사용자 ID와 암호를 묻는 메시지를 표시 할 때 사용자에게 표시 할 수있는 리터럴을 브라우저에 제공합니다.
Basic Auth를 사용할 때 세션 만료 시점이 없기 때문에 분명히 Basic을 사용하고 있지 않습니다. 나는 당신이 어떤 형태의 폼 기반 인증을 사용하고 있다고 가정합니다.
기억하자면 Windows Challenge Response는 다른 체계와 다른 인수를 사용합니다.
트릭은 브라우저가 지원하는 체계와 이에 대응하는 방식을 결정하는 것은 브라우저에 달려 있다는 것입니다.
양식 기반 인증을 사용하는 경우 내 직감은 200 + 다시 로그인 페이지를 유지하지만 브라우저가 무시하지만 AJAX가 식별 할 수있는 사용자 지정 헤더를 추가하는 것입니다.
정말 좋은 User + AJAX 경험을 위해서는 세션이 만료 된 AJAX 요청에 매달리고 팝업을 통해 재 로그인 요청을 실행하고 성공하면 원래 AJAX 요청을 다시 제출하고 정상적으로 계속 진행하는 스크립트를 가져옵니다.
세션 만료 시점을 무너 뜨리는 세션을 유지하기 위해 스크립트가 5 분마다 사이트를 공격하는 치트를 피하십시오.
다른 대안은 AJAX 요청을 태우는 것이지만 사용자 경험이 좋지 않습니다.
답변
아니요, 사용할 인증 방법 (일반적으로 “Basic”)과 인증 영역을 지정해야합니다. 예제 요청 및 응답 은 http://en.wikipedia.org/wiki/Basic_access_authentication 을 참조하십시오 .
RFC 2617-HTTP 인증 : 기본 및 다이제스트 액세스 인증 을 읽어 볼 수도 있습니다 .
답변
사용자 세션이 시간 초과되면 HTTP 204 상태 코드를 다시 보냅니다. HTTP 204 상태에는 콘텐츠가 포함되어 있지 않습니다. 클라이언트 측에서 다음을 수행합니다.
xhr.send(null);
if (xhr.status == 204)
Reload();
else
dropdown.innerHTML = xhr.responseText;
다음은 Reload () 함수입니다.
function Reload() {
var oForm = document.createElement("form");
document.body.appendChild(oForm);
oForm.submit();
}