2009-05-19 2 views
12

내가 좋아하는 구성으로 FormsAuthentication를 사용하는 ASP.NET 웹 사이트와 표준 세션 메커니즘을 구축하고는 :양식 인증 쿠키와 Asp.Net 세션의 수명을 동기화하는 방법은 무엇입니까?

<authentication mode="Forms"> 
    <forms cookieless="UseCookies" name=".MyAppAuth" loginUrl="~\Login.aspx" timeout="20"/> 
</authentication> 
... 
<sessionState timeout="20" cookieless="UseCookies" /> 

는 인증 쿠키의 수명은 사용자 세션의 수명이 동일하지 않은 것으로 보인다. 그래서 ASP.NET은

  • 세션은 사용자가 로그 아웃하기 전에 종료하지 않는 경우 사용자가 로그 아웃

    1. 세션이 종료되는 것은 아닙니다.

    FormsAuthentication 또는 세션 상태 메커니즘을 사용자 지정하여 이러한 목표에 도달 할 수 있습니까?

  • 답변

    6

    사용자가 세션을 계속 유지하려는 것보다 오래 로그인 한 상태로 유지하려는 경우가 있기 때문에 기본 메커니즘이 없습니다. 또한 세션은 저장 영역을 보장하기위한 것이 아니므로 세션중인 데이터에 대한 의존성을 피해야합니다.

    인증 쿠키가 만료되면 서버에서 아무런 반응이 없습니다. 추적 된 상태가 없습니다.

    '로그 아웃'링크가 있고 처리기에 Abandon 세션에 FormsAuthentication의 SignOut이 있지만 사용자가 웹 사이트에서 로그 아웃하도록 강요하는 항목은 없습니다.

    일부 사용자는 세션을 좋아하지만 일부 사용자는 남용이 싫어서 증오하거나 싫어하게됩니다. 주된 이유는 세션 과용이 서버 성능 저하의 원인이되며 세션을 잘못 사용하면 확장되지 않는 웹 사이트가 만들어 질 수 있기 때문입니다.

    가능한 경우 Session 사용을 피하고 사용해야한다면 MSDN 문서 Improving ASP.NET Performance의 권장 사항을 준수하십시오. 또한 Understanding session state modes + FAQ과 특히 을보십시오. Q : Session_End가 실행되지 않는 이유는 무엇입니까?

    9

    저는이 질문을 여러 번 들었습니다. 제 대답은 대개 "왜 이것을 원할까요?"입니다. 하나는 다른 것을 필요로하지 않으며 만료 시간은 다른 기준을 사용하여 결정되어야합니다.

    세션 상태는 사용자가 로그인 할 필요가 없습니다. 앱은 세션 상태를 사용하기 위해 인증을 사용할 필요조차 없습니다. 사용자가 로그인하기 전에 이미 세션 상태를 사용 중이며 로그 아웃 한 후에도 세션 상태를 사용하는 웹 앱을 가질 수 있습니다. "세션"은 클라이언트 (웹 브라우저)가 사이트에 연결하고, 몇 페이지를 뛰어 넘고, 떠날 때입니다. 사용자가 로그인했는지 여부는 관련이 없습니다. 브라우저를 닫고 새 브라우저를 열고 사이트로 돌아 가면 새 세션이 만들어집니다. 그러나 서버는 이전 브라우저 창을 닫았다는 것을 모르기 때문에 원래 세션은 계속 존재합니다. 확장 성 (주로 메모리) 목적으로 세션을 만료하고 메모리 및 세션 추적 리소스를 확보합니다. 클라이언트가 새 요청을하는 데 너무 오래 걸리면 새 요청이 새 세션을 만듭니다.

    반면에 인증을 사용하고 세션 상태를 전혀 사용할 수 없습니다. 나는 일반적으로 세션 상태와 viewstate가 비활성화 된 상태에서 내 애플 리케이션을 시작하고 정말로 필요한 경우에만 그리고 페이지 단위로 (또는 viewstate를위한 컨트롤에 의한) 컨트롤을 활성화한다.

    세션 만료 시간은 각 세션에서 사용하는 메모리, 웹 서버에서 사용할 수있는 메모리, 동시 사용자 수 및 기타 확장 성 요구에 따라 결정되어야합니다. 일반적으로 몇 분에서 한 시간 정도입니다.

    인증은 클라이언트의 쿠키로 유지되며 기본적으로 서버의 리소스를 소비하지 않습니다. 확장 성 측면에서 로그인 만료는 일반적으로 세션 만료보다 길 수 있습니다. 실제로 사용자는 무기한 로그인 상태를 유지할 수 있습니다. 인증 만료를 짧게 유지하면 대개 보안상의 이유로 종료됩니다. 15 분 동안 컴퓨터에서 다른 곳으로 이동하면 은행 웹 사이트 계정을 다른 사람이 사용할 수 없게 할 수 있습니까? gmail이나 facebook에 로그인하여 "remember me"를 선택하고 며칠 후 돌아 오면 이 여전히입니다. 물론 몇 가지 세션 데이터를 유지해야하는 웹 앱이 없기 때문에 이것은 새로운 세션이 될 것입니다 일.

    이제 많은 사람들이 인증 및 세션 만료에 동일한 시간을 사용하는 것을 보았습니다. 또한 많은 사용자가 로그 아웃 할 때 세션을 취소() 또는 지우기()합니다. 그러나 그들은 사용자가 여전히 로그인했지만 세션이 만료 된 경우 (다음 요청시 새 세션을 만듭니다) 또는 사용자 인증이 만료되었지만 세션이 만료되지 않은 경우를 관리해야한다는 것을 잊어 버립니다 (다시 로그인해야하지만 이전 세션이 만료되었거나 다른 사용자의 중요한 데이터로 이동해야 함). 궁극적으로 응용 프로그램을 선택하는 시간 제한에 관계없이 이러한 사례를 돌보는 것은 매우 중요합니다.

    4

    내가 때때로이 질문을하는 이유는 "만료 된"세션 개체에 액세스하지 못하게하기 위해서입니다. 세션이 로그인 만료 전에 만료되고 사용자가 세션의 데이터를 사용하는 페이지를 요청하면 더러운 null 참조 예외가 발생합니다.

    article이 도움이 될 수 있습니다. 만료 된 세션을 감지하고 사용자에게이를 알려주는 몇 가지 솔루션에 대해 설명합니다.

    관련 문제