문제

나는 사용자가 무기한으로 로그인 상태를 유지하기를 원하는지 확인할 수 있는 기능을 내 애플리케이션에 갖고 싶습니다(임의로 쿠키 만료를 지금부터 3개월로 설정).

이 문제를 처리하기 위해 내가 가지고 있는 코드는 다음과 같습니다.

private static HttpCookie GetFormsAuthenticationCookie(string userNameResponse, 
                                                        bool persistCookie)
{            
    var cookie = FormsAuthentication.GetAuthCookie(userNameResponse, persistCookie);

    if (persistCookie)
        cookie.Expires = DateTime.Now.AddMonths(3);

    return cookie;
}

private void LoginUser(string userNameResponse, bool PersistCookie)
{
    Response.Cookies.Add(GetFormsAuthenticationCookie(userNameResponse, PersistCookie));

    string navigateAfterUrl = FormsAuthentication.GetRedirectUrl(userNameResponse,
                                                                 PersistCookie);

    Response.Redirect(navigateAfterUrl);
}

그러나 나중에 사이트로 돌아가면 다시 로그인해야 합니다.쿠키가 만료 날짜와 함께 다시 돌아오고 세션 쿠키로 설정되지 않았음을 확인했습니다(브라우저 닫기/다시 열기 테스트를 거쳤으며 쿠키가 여전히 존재함).내 생각에는 ASP.NET이 세션을 만료할 때와 관련이 있다는 것입니다.

내 web.config에 특정 컴퓨터 키 설정이 있으므로 IIS가 다시 시작되는 경우에도 동일한 쿠키가 작동하면 안 됩니까?내가 할 수 있는 다른 일이 생각나지 않기 때문에 이 문제의 원인이 무엇인지 또는 적어도 이것을 더 추적하는 방법에 대한 제안이 있는 사람이 있습니까?

도움이 되었습니까?

해결책

전화를 걸 때 GetAuthCookie 방법 a 양식인증티켓 에 의해 지정된 시간 초과로 생성됩니다. 시간 초과 web.config의 속성입니다.따라서 올바르게 설정했는지 확인하십시오.

<authentication mode="Forms">
  <forms
    loginUrl="/someloginUrl"
    requireSSL="true"
    protection="All"
    // This is the setting you are looking for! (it's in seconds)
    timeout="120"
    domain="example.com"
    slidingExpiration="false"
    name="cookieName" />
</authentication>

티켓이 암호화되면 쿠키 값으로 사용됩니다.설정하면 만료 귀하의 쿠키 속성을 지정된 값으로 설정하면 해당 쿠키가 지정된 기간 동안 클라이언트 컴퓨터에 유지된다는 의미입니다.그런 다음 모든 요청에서 ASP.NET 런타임은 쿠키의 존재를 확인하고 값의 암호를 해독하고 티켓을 얻으려고 시도합니다.다음으로 Timeout 속성을 사용하여 티켓이 여전히 유효한지 확인합니다. 따라서 시간 초과가 조금이라도 발생하면 쿠키가 계속 전송되더라도 티켓이 더 이상 유효하지 않으며 인증이 실패하게 됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top