2013-09-23 2 views
1

폼 인증을 사용할 때 ASP.NET 세션이 만료되는 & 시간을 결정할 수 있습니까?ASP.NET 폼 인증이 만료되는시기를 결정하십시오.

세션이 만료 될 때 사용자에게 경고하고 싶습니다. 세션 상태가 없습니다 & 슬라이딩 만료가 비활성화되었습니다.

<authentication mode="Forms"> 
    <forms defaultUrl="Default.aspx" loginUrl="Login.aspx" requireSSL="false" enableCrossAppRedirects="true" cookieless="AutoDetect" timeout="2" slidingExpiration="false"/> 
</authentication> 

<sessionState mode="Off"/> 

시간 초과가/세션의 수명이 결정하기 쉽지만, 사용자가 날짜와 시간으로 평생 가치를 추가, 세션 창 내에서 페이지를 새로 고침해야 다음은 system.web 설정 중 일부입니다 재 장전시 정확하지 않습니다.

값이 FormsAuthenticationTicket 인 인증 쿠키를 사용하여 티켓을 암호화하여 해독하여 만료 날짜 - 시간을 얻을 수 있습니다.

일부 AJAX 호출이 이루어질 수 있지만 사용자는 웹 서버에 대한 포스트 백 또는 요청없이 UI와 상호 작용할 수 있습니다.

쿠키를 사용하지 않고 이러한 유형의 동작을 달성 할 수있는 방법에 대한 아이디어가 있습니까?

+0

쿠키를 사용하고 있습니까? 어떤 종류의 쿠키? –

+0

예, 암호화 된 사용자 데이터가 포함 된 쿠키를 사용하고 있습니다. 그것에 만료 값을 설정하지는 않습니다. – Raybiez

+0

그런 경우에는 브라우저가 열려있는 동안 기본값이 30 분 동안 비활성 상태라고 생각하고 브라우저를 닫으면 만료됩니다. –

답변

2

비슷한 문제가 있습니다. 필자의 경우 사용자 수가 적기 때문에 페이지에서 폴링 아약스 호출을 사용하여 더 나은 사용자 환경을 선택하여 서버로 다시 콜하고 만료 티켓을 확인하십시오. 아래 코드를 수정하고 http를 통해 페이지에 만료 정보를 포함시키고 클라이언트 자바 스크립트에서 시간을 추적하는 일은 멀리 할 수 ​​있습니다. 아약스 경로를 가고 싶지 않으면.

 if (User.Identity.IsAuthenticated) 
     { 
      var identity = (FormsIdentity)User.Identity;  
      viewModel.UtcInactivityExpiryDate = identity.Ticket.Expiration.ToUniversalTime();     
     } 

아약스 경로로 가면 다른 하나가 있습니다. Ajax 호출 자체를 사용하는 경우 비활성 시간 초과를 갱신하지 말고 Ajax 호출 자체를 중지해야합니다. 새 인증 쿠키를 원래의 인증 쿠키로 겹쳐 쓰면됩니다. 아약스 요청이 끝나면

  var requestCookie = HttpContext.Current.Request.Cookies[".ASPXAUTH"]; 
      if (requestCookie != null) 
      { 
       HttpContext.Current.Response.Cookies.Add(requestCookie); 
      } 
관련 문제