2009-03-17 5 views
7

FormsAuthentication 및 ASP.Net SqlMembership Provider를 사용하고 있습니다. 기본 세션이 만료되었을 때 LogIn 페이지로 리디렉션하는 기능을 제공하고 싶습니다. 다음 코드 블록을 내 기본 페이지 OnInit에 넣습니다. 필자가 테스트 한 바로는 정확한 UserID와 Password를 입력 했는데도 LogIn 페이지로 리디렉션됩니다. 권한으로 기본 페이지로 이동해야합니다. 상당히 시급한 일이며 모든 도움을 많이 받으실 수 있습니다.세션이 만료되면 LogIn 페이지로 리디렉션하는 방법 (ASP.NET 3.5 FormsAuthen)

감사합니다, Thurein

if (Context.Session != null && Session.IsNewSession && this.Request.IsAuthenticated) 
     { 
      string cookieHeader = Request.Headers["Cookie"]; 
      if (cookieHeader != null && cookieHeader.IndexOf("ASP.NET_SessionId") >= 0) 
      { 


        HttpContext.Current.Session.Abandon();      
        FormsAuthentication.SignOut();       
        Response.Redirect(FormsAuthentication.LoginUrl);           

      } 
     } 
+0

어쨌든이 기능이 Forms 인증에 내장되어 있지 않습니까? –

+0

@ Rob : 예, 그렇습니다. –

답변

19

당신은이 기능에 대한 사용자 지정 코드가 필요하지 않습니다, 그것은 프레임 워크에서 지원합니다. 그냥 Web.config의 그것을 구성 : 자신의 세션이 만료되면 위의 구성으로

<authentication mode="Forms"> 
    <forms defaultUrl="~/Default.aspx" 
     loginUrl="~/Login.aspx" 
     slidingExpiration="true" 
     timeout="60" /> 
</authentication> 

, 사용자는 항상 Login.aspx 페이지로 리디렉션됩니다. 시간 초과는 60 분이며 슬라이딩 만료는 사용자가 웹 응용 프로그램에 요청할 때마다 시간 초과가 연장되므로 활성 상태로 유지되면 세션이 만료되지 않습니다. 이와 같은 구성은 사용자가 시도한 것에 비해 또 다른 이점을 제공합니다. 사용자가 로그인하면 원래 요청한 자원으로 자동 리디렉션됩니다. 그리고 언제든지이 동작을 무시하고 사용자 지정할 수 있습니다.

+0

안녕하세요 Pawel Krakowiak, 답변 해 주셔서 감사합니다. :) 사실, 이미 위에서 언급 한 것과 동일한 구성을 수행했습니다. (그러나 나는 이미 존재하는 기능을 처리하기 위해 사용자 정의 코딩을하기 위해 무엇을 얻었는지 모르겠다.) 감사합니다. Kyaw Thurein –

+0

다음과 같은 폼에서 저장 버튼을 클릭하면 이런 현상이 발생한다고 가정 해 봅시다. 다시 게시하면 로그인 페이지로 이동 한 다음 로그인하여 원래 자원으로 돌아갑니다. 그러면 양식 데이터를 평소와 같이 처리 할 수 ​​있도록 다시 게시 할 수 있습니까? – AaronLS

+1

@aaronls : 아니요, 데이터가 손실됩니다. –

13

Pawel's answer 부분적으로 올바르지 만 Session 수명을 양식 인증 쿠키 수명보다 긴 값으로 설정해야합니다. 양식 인증 timeout 값은 인증 쿠키의 유효 기간에만 영향을줍니다. 그가 제공 한 예제에서 인증 쿠키 수명은 60 분이지만 기본 세션 수명은 20 분입니다. 사용자가 자신의 컴퓨터를 20 분 이상 방치했을 경우 세션 데이터가 삭제되고 세션에 저장된 값을 참조하려고 시도하면 예외가 throw됩니다 (예 : .ToString() 시도 또는 캐스팅의 경우).

당신은 당신의 web.config 파일에 sessionState 설정을 구성하여 응용 프로그램에서 전 세계적으로이를 설정할 수 있습니다

<sessionState 
    mode="InProc" 
    cookieless="false" 
    timeout="70"/> 

이 세션 제한 시간에 5-10 분 추가 좋은 버퍼를 제공한다.

+0

추가 설명 주셔서 감사합니다. 세션 변수를 사용할 때 정말로 중요합니다. 나는 그들을 사용하려고 시도하기 전에 그들의 존재/가치에 대해 편집증 검사를하는 습관이 있습니다. ;) –

+1

알아요 ... signoutIfSessionExpired = "true"설정이없는 것은 부끄러운 일입니다. – Kev

+0

안녕 Kev, 정말 고마워요. 감사합니다, Thurein –

관련 문제