ntombela
ntombela

Reputation: 1388

How do I warn the user that their web session is about to time out?

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.

Upvotes: 3

Views: 14329

Answers (1)

Dmytrii Nagirniak
Dmytrii Nagirniak

Reputation: 24098

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.

Upvotes: 5

Related Questions