123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /*jshint browser:true*/
- //
- // jquery.sessionTimeout.js
- //
- // After a set amount of time, a dialog is shown to the user with the option
- // to either log out now, or stay connected. If log out now is selected,
- // the page is redirected to a logout URL. If stay connected is selected,
- // a keep-alive URL is requested through AJAX. If no options is selected
- // after another set amount of time, the page is automatically redirected
- // to a timeout URL.
- //
- //
- // USAGE
- //
- // 1. Include jQuery
- // 2. Include jQuery UI (for dialog)
- // 3. Include jquery.sessionTimeout.js
- // 4. Call $.sessionTimeout(); after document ready
- //
- //
- // OPTIONS
- //
- // message
- // Text shown to user in dialog after warning period.
- // Default: 'Your session is about to expire.'
- //
- // keepAliveUrl
- // URL to call through AJAX to keep session alive. This resource should do something innocuous that would keep the session alive, which will depend on your server-side platform.
- // Default: '/keep-alive'
- //
- // redirUrl
- // URL to take browser to if no action is take after warning period
- // Default: '/timed-out'
- //
- // logoutUrl
- // URL to take browser to if user clicks "Log Out Now"
- // Default: '/log-out'
- //
- // warnAfter
- // Time in milliseconds after page is opened until warning dialog is opened
- // Default: 900000 (15 minutes)
- //
- // redirAfter
- // Time in milliseconds after page is opened until browser is redirected to redirUrl
- // Default: 1200000 (20 minutes)
- //
- (function( $ ){
- jQuery.sessionTimeout = function( options ) {
- var defaults = {
- title : 'Session Notification',
- message : 'Your session is about to expire.',
- keepAliveUrl : '/keep-alive',
- redirUrl : '/timed-out',
- logoutUrl : '/log-out',
- warnAfter : 900000, // 15 minutes
- redirAfter : 1200000 // 20 minutes
- };
- // Extend user-set options over defaults
- var o = defaults,
- dialogTimer,
- redirTimer;
- if ( options ) { o = $.extend( defaults, options ); }
- // Create timeout warning dialog
- $('body').append('<div class="modal fade" id="sessionTimeout-dialog"><div class="modal-dialog modal-small"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button><h4 class="modal-title">'+ o.title +'</h4></div><div class="modal-body">'+ o.message +'</div><div class="modal-footer"><button id="sessionTimeout-dialog-logout" type="button" class="btn btn-default">Logout</button><button id="sessionTimeout-dialog-keepalive" type="button" class="btn btn-primary" data-dismiss="modal">Stay Connected</button></div></div></div></div>');
- $('#sessionTimeout-dialog-logout').on('click', function () { window.location = o.logoutUrl; });
- $('#sessionTimeout-dialog').on('hide.bs.modal', function () {
- $.ajax({
- type: 'POST',
- url: o.keepAliveUrl
- });
- // Stop redirect timer and restart warning timer
- controlRedirTimer('stop');
- controlDialogTimer('start');
- })
- function controlDialogTimer(action){
- switch(action) {
- case 'start':
- // After warning period, show dialog and start redirect timer
- dialogTimer = setTimeout(function(){
- $('#sessionTimeout-dialog').modal('show');
- controlRedirTimer('start');
- }, o.warnAfter);
- break;
- case 'stop':
- clearTimeout(dialogTimer);
- break;
- }
- }
- function controlRedirTimer(action){
- switch(action) {
- case 'start':
- // Dialog has been shown, if no action taken during redir period, redirect
- redirTimer = setTimeout(function(){
- window.location = o.redirUrl;
- }, o.redirAfter - o.warnAfter);
- break;
- case 'stop':
- clearTimeout(redirTimer);
- break;
- }
- }
- // Begin warning period
- controlDialogTimer('start');
- };
- })( jQuery );
|