views:

196

answers:

1

I've checked around for a solution but I don't seem to get any directed to asp.net mvc. Basically I'm looking for a solution where a user is notified a minute before the session expires.

The ideal solution will be count down notification that will have an option to renew the session.

If the countdown timer expires without the user refreshing the page, I need to log them out.

+2  A: 

Something like this:

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

and this:

<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>

Wrote the View in notepad, so please check the syntax. I also don't remember exactly the DateTime stuff in JS.

Anyway you should see the idea.

Dmytrii Nagirniak