2009-11-16 3 views
2

해결책을 찾아 보았지만 asp.net MVC에 대한 지시를받지 못했습니다. 기본적으로 세션이 만료되기 전에 사용자에게 알림이 전송되는 솔루션을 찾고 있습니다.웹 세션이 만료 될 것이라고 사용자에게 어떻게 경고합니까?

이상적인 솔루션은 세션을 갱신 할 수있는 옵션의 카운트 다운 알림입니다.

사용자가 페이지를 새로 고치지 않고 카운트 다운 타이머가 만료되면 로그 아웃해야합니다. 이 같은

답변

3

뭔가 :

public class YourController : Controller { 
    public ActionResult TheAction() { 
     ViewData["SessionTimeout"] = Request.Session.Timout; 
     ViewData["SessionWillExpireOn"] = DateTime.Now.AddMinutes(Request.Session.Timeout); 
     return View(info); 
    } 
} 

이것은 :

<span>Your session will expire: <%= ViewData["SessionWillExpireOn"].ToString() %></span> 
<span id="countDown" style="display:none></span> 
<script type="text/javascript"> 
    var sessionTimout = <%= ViewData["SessionTimeout"].ToString(); %>;  
    var approximateStart = new Date(); 
    var notifyAfter = new Date(approximateStart + (sessionTimout - 1)*60*1000); 
    function startCountDown() { 
     setTimout(function() { 
      var now = new Date(); 
      document.getElementById('countDown').style.display = 'inline'; 
      document.getElementById('countDown').innerHTML = "Countdown: " + now.getMinutes(); 
      if (now >= notifyAfter) 
       alert('About to expire...'); 
     }, 5000); 
    } 
    document.onload=startCountDown; 
</script> 

그렇게 구문을 확인하시기 바랍니다 메모장에서보기를 썼다. 나는 또한 JS에서 DateTime을 정확하게 기억하지 않는다.

어쨌든 당신은 아이디어를보아야합니다.

+0

탭이 열린 채로 있지만 다른 탭이 세션을 활성 상태로 유지하면 어떻게됩니까? 이 솔루션은 세션이 아직 살아 있는지 알기 위해 서버를 폴링하지 않습니다. –

+0

@PederRice : 서버를 폴링 할 방법이 없습니다. 세션 시간 초과는 * sliding *이므로 서버에 요청하면 세션 시간 초과가 재설정됩니다. 기본적으로 시간 제한이 30 분이면 모든 설문 조사의 결과는 30 분이됩니다. –

관련 문제