Javascript countdown timer for session timeout

I want to warn the user that the session has timed out. I want to have a popup with an OK button and show the number of seconds marked in the popup. Can I only do this with a Java script? I am fine using C # code as well.

Right now, it detects the session timeout and pops up, informing them that the session has expired.

<script type="text/javascript"> var sessionTimeout = "<%= Session.Timeout %>"; function DisplaySessionTimeout() { sessionTimeout = sessionTimeout - 1; if (sessionTimeout >= 0) window.setTimeout("DisplaySessionTimeout()", 60000); else { alert("Your current Session is over due to inactivity."); } } </script> 
+4
source share
4 answers

Yes, you can do it via JavaScript. Here is a simple counter implementation of fooobar.com/questions/45159 / .... I found some time ago:

 function Counter(options) { var timer; var instance = this; var seconds = options.seconds || 10; var onUpdateStatus = options.onUpdateStatus || function() {}; var onCounterEnd = options.onCounterEnd || function() {}; var onCounterStart = options.onCounterStart || function() {}; function decrementCounter() { onUpdateStatus(seconds); if (seconds === 0) { stopCounter(); onCounterEnd(); return; } seconds--; }; function startCounter() { onCounterStart(); clearInterval(timer); timer = 0; decrementCounter(); timer = setInterval(decrementCounter, 1000); }; function stopCounter() { clearInterval(timer); }; return { start : function() { startCounter(); }, stop : function() { stopCounter(); } } }; 

... and an example of how to use it:

 var countdown = new Counter({ // number of seconds to count down seconds: 3, onCounterStart: function () { // show pop up with a message ... }, // callback function for each second onUpdateStatus: function(second) { // change the UI that displays the seconds remaining in the timeout ... }, // callback function for final action after countdown onCounterEnd: function() { // show message that session is over, perhaps redirect or log out ... } }); countdown.start(); 

As soon as the server is ready to warn the user, just create a timer and it will start the countdown. You can configure what happens in each event: when the timer starts, when the second is ticking, and when the countdown is done.

+7
source

I found this solution very useful. You will need to set the authentication timeout in the web.config file of your project in order to support this, but I also added an option so that the user can continue the session if he wants to.

add the following to your main HTML page in the head tag:

 <style type="text/css"> #timeOutWarningOverlay { position: fixed; display: none; width: 100%; height: 100%; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0,0,0,0.5); z-index: 2000; cursor: pointer; } </style> 

right below the start of the body tag

 <div id="timeOutWarningOverlay"> <div style="height:auto; width:400px; background-color:white; position: fixed;top: 50%;left: 50%; -webkit-transform: translate(-50%, -50%);transform: translate(-50%, -50%);padding:10px; text-align:center;"> <div> <b>Your session is about to expire. Please click button below to keep this session current.</b> <b><span style="background-color:yellow;">00:</span><span id="time" style="background-color:yellow;">59</span></b> </div> <a id="keep" href="#">Keep Me Logged In</a> </div> </div> 

Now javascript to handle this. I like to use jquery, so this is mostly in jquery, but you can get an idea of ​​the approach. This example is for a 15 minute break. Remember that you need to update the authentication timeout of the web.config file.

  var counter = 60; var idleTime = 0; var countdown; $(document).ready(function () { $(window).click(function () { console.log("click has occured"); idleTime = 0; }) $(window).keyup(function () { console.log("key up has occured") idleTime = 0; }) //Increment the idle time counter every minute. var idleInterval = setInterval(timerIncrement, 60000); //found $('#keep').click(function () { idleTime = 0; $('#timeOutWarningOverlay').hide(); }); }); function timerIncrement() { idleTime = idleTime + 1; console.log(idleTime); if (idleTime > 13) //13 { $('#timeOutWarningOverlay').show(); startTimer(); } if (idleTime > 14) { // 14 window.location.href = '/login.aspx'; alert("You session has expired due to no activity."); } }; function startTimer() { countdown = setInterval(countDownClock, 1000); }; function countDownClock() { counter = counter - 1 if (counter < 10) { console.log(counter); $('#time').text("0" + counter); } else { console.log(counter); $('#time').text(counter); } if (counter == 0) { counter = 60; clearInterval(countdown); console.log(counter); console.log("done"); } }; 

A message appears after 14 minutes and starts counting seconds for the user. Hope this helps, happy coding.

+1
source

I would recommend using setInterval instead of setTimeout.

Something like that:

 <script> var startTime = new Date(milliseconds), timeoutLength = 60000; var interval = setInterval("checkTimeout()",1000); function checkTimeout() { var currentTime = new Date(millisecond); if (currentTime > startTime + timeoutLength) { clearInterval(interval); alert ("Your current Session is over due to inactivity."); } } </script> 
0
source

Solution 1 - Countdown Timer

First, just create a countdown timer, the code is below, and if you did, just add the windows.location path (redirect page address).

  <sctipt> var interval; $(document).on('mousemove', function () { clearInterval(interval); var coutdown = 5 * 60, $timer = $('.timer'); // After 5 minutes session expired (mouse button click code) $timer.text(coutdown); interval = setInterval(function () { $timer.text(--coutdown); if (coutdown === 0) { alert("Session expired User successfully logout."); window.location = "UserLogin.aspx"; } }, 1000); }).mousemove(); var interval; $(document).on('keydown', function () { clearInterval(interval); var coutdown = 5 * 60, $timer = $('.timer'); // After 5 minutes session expired (keyboard button press code) $timer.text(coutdown); interval = setInterval(function () { $timer.text(--coutdown); if (coutdown === 0) { alert("Session expired User successfully logout."); window.location = "UserLogin.aspx"; } }, 1000); }).mousemove(); <sctipt> 

And if you want to show the time on your web page, add this code.

  <html> <div class="timer"> <p> Session Time</p> </div> </html> 

Solution 2 - Countdown Timer with Buttons

HTML:

 <script type="text/javascript" src="https://code.jquery.com/jquery-1.7.2.min.js"></script> <div class="timer"> <span class="hour">00</span>:<span class="minute">00</span>:<span class="second">10</span> </div> <div class="control"> <button onClick="timer.start(1000)">Start</button> <button onClick="timer.stop()">Stop</button> <button onClick="timer.reset(60)">Reset</button> <button onClick="timer.mode(1)">Count up</button> <button onClick="timer.mode(0)">Count down</button> </div> 

CSS:

 div.timer { border:1px #666666 solid; width:190px; height:50px; line-height:50px; font-size:36px; font-family:"Courier New", Courier, monospace; text-align:center; margin:5px; } 

Javascript:

 function _timer(callback) { var time = 0; // The default time of the timer var mode = 1; // Mode: count up or count down var status = 0; // Status: timer is running or stoped var timer_id; // This is used by setInterval function // this will start the timer ex. start the timer with 1 second interval timer.start(1000) this.start = function(interval) { interval = (typeof(interval) !== 'undefined') ? interval : 1000; if(status == 0) { status = 1; timer_id = setInterval(function() { switch(mode) { default: if(time) { time--; generateTime(); if(typeof(callback) === 'function') callback(time); } break; case 1: if(time < 86400) { time++; generateTime(); if(typeof(callback) === 'function') callback(time); } break; } }, interval); } } // Same as the name, this will stop or pause the timer ex. timer.stop() this.stop = function() { if(status == 1) { status = 0; clearInterval(timer_id); } } // Reset the timer to zero or reset it to your own custom time ex. reset to zero second timer.reset(0) this.reset = function(sec) { sec = (typeof(sec) !== 'undefined') ? sec : 0; time = sec; generateTime(time); } // Change the mode of the timer, count-up (1) or countdown (0) this.mode = function(tmode) { mode = tmode; } // This methode return the current value of the timer this.getTime = function() { return time; } // This methode return the current mode of the timer count-up (1) or countdown (0) this.getMode = function() { return mode; } // This methode return the status of the timer running (1) or stoped (1) this.getStatus { return status; } // This methode will render the time variable to hour:minute:second format function generateTime() { var second = time % 60; var minute = Math.floor(time / 60) % 60; var hour = Math.floor(time / 3600) % 60; second = (second < 10) ? '0'+second : second; minute = (minute < 10) ? '0'+minute : minute; hour = (hour < 10) ? '0'+hour : hour; $('div.timer span.second').html(second); $('div.timer span.minute').html(minute); $('div.timer span.hour').html(hour); } } // example use var timer; $(document).ready(function(e) { timer = new _timer ( function(time) { if(time == 0) { timer.stop(); alert('time out'); } } ); timer.reset(0); timer.mode(0); }); 
0
source

Source: https://habr.com/ru/post/1402052/


All Articles