Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript实现会话到期提醒?_Javascript_Jquery_Session - Fatal编程技术网

如何使用JavaScript实现会话到期提醒?

如何使用JavaScript实现会话到期提醒?,javascript,jquery,session,Javascript,Jquery,Session,我真的很想在会话到期前提示用户保持会话的活动状态 昨天,我问了一个问题“”,有人用一个AJAX/JSON解决方案回答,该解决方案每30秒调用一次ASP页面。这不起作用,因为对服务器的调用使会话保持活动状态,因此它永远不会注销 我一直在阅读,遇到了一个类似的问题,有人建议在会话到期前5分钟使用JS倒计时提示用户续订会话 这是我迄今为止所做的,但: 函数startminitimer似乎没有保留时间,因为我没有在计时器到期时收到警报 $('body').mousedown()功能不能正常工作。它可以工

我真的很想在会话到期前提示用户保持会话的活动状态

昨天,我问了一个问题“”,有人用一个AJAX/JSON解决方案回答,该解决方案每30秒调用一次ASP页面。这不起作用,因为对服务器的调用使会话保持活动状态,因此它永远不会注销

我一直在阅读,遇到了一个类似的问题,有人建议在会话到期前5分钟使用JS倒计时提示用户续订会话

这是我迄今为止所做的,但:

  • 函数
    startminitimer
    似乎没有保留时间,因为我没有在计时器到期时收到警报
  • $('body').mousedown()
    功能不能正常工作。它可以工作,但如果用户单击链接,mousedown函数可以工作,但在函数运行后不会跟随链接
  • 代码如下:

    <script>
    $(document).ready(function() {
        $.ajax({ // get session expiration value e.g. 60
        type : 'GET',
        url : '../getSessionValue.asp',
        dataType : 'text',
        success : function(data) {
            if (data != '') {
                var newSessionValue = data - 5
                startMainTimer(newSessionValue * 60000); // deduct 5 minutes, convert to mSeconds & call startNewTimer()
            }
        }
        });
    
        $('body').mousedown( function() { // if user clicks anywhere on page call ajaxRenewSession() function
            ajaxRenewSession();
        });
    
        $('#userButtonRenewSession').click( function() { // if user clicks continue browsing button
            ajaxRenewSession();
        });
    });
    
    function startMainTimer(newSessionValue,restart) {
        if (restart == 'yes') {
            clearInterval(interval);
        }
        var counter = 0;
        var interval = setInterval(function() {
            counter++;
            if (counter == newSessionValue) {
                alert("Your session is about to expire!");
                clearInterval(interval);
            }
        }, 1000);
    }
    
    function ajaxRenewSession() { // AJAX the server to renew session, get session timeout value and then reset JS timer
        $.ajax({
        type : 'GET',
        url : '../renewSession.asp',
        dataType : 'text',
        success : function(data) {
            if (data != '') {
                    var newSessionValue = data - 5
                    startMainTimer(newSessionValue * 60000, 'yes');
            }
        }
        });
    }
    </script>
    
    
    $(文档).ready(函数(){
    $.ajax({//获取会话到期值,例如60
    键入:“GET”,
    url:“../getSessionValue.asp”,
    数据类型:“文本”,
    成功:功能(数据){
    如果(数据!=''){
    var newSessionValue=data-5
    开始计时器(newSessionValue*60000);//扣除5分钟,转换为毫秒并调用开始计时器()
    }
    }
    });
    $('body').mousedown(function(){//如果用户单击页面上的任何位置,请调用AjaxRenewalSession()函数
    ajax会话();
    });
    $('#UserButtonNewSession')。如果用户单击“继续浏览”按钮,请单击(函数(){//)
    ajax会话();
    });
    });
    函数startMainTimer(newSessionValue,重新启动){
    如果(重新启动==“是”){
    间隔时间;
    }
    var计数器=0;
    var interval=setInterval(函数(){
    计数器++;
    if(计数器==newSessionValue){
    警报(“您的会话即将过期!”);
    间隔时间;
    }
    }, 1000);
    }
    函数ajaxRenewalSession(){//AJAX命令服务器更新会话,获取会话超时值,然后重置JS计时器
    $.ajax({
    键入:“GET”,
    url:“../renewSession.asp”,
    数据类型:“文本”,
    成功:功能(数据){
    如果(数据!=''){
    var newSessionValue=data-5
    StartInitiatier(newSessionValue*60000,“是”);
    }
    }
    });
    }
    

    有人能帮我纠正这些问题吗?

    鼠标的功能似乎有效,我在stackoverflow.com上测试了它。但是,在某些情况下,它可能不起作用,例如,如果用户按下链接,拖动链接,然后将其删除。在这种情况下,没有为我提出任何事件

    另一件事:您必须在
    startMainTimer
    的开头清除主计时器,否则,每次用户单击某个位置时,都会启动一个额外的计时器


    你知道最后一次调用
    startMainTimer
    时遗漏了一个参数吗?

    使用
    mouseup
    的方法似乎有效,我在stackoverflow.com上测试了它。但是,在某些情况下,它可能不起作用,例如,如果用户按下链接,拖动链接,然后将其删除。在这种情况下,没有为我提出任何事件

    另一件事:您必须在
    startMainTimer
    的开头清除主计时器,否则,每次用户单击某个位置时,都会启动一个额外的计时器


    您知道上次调用
    startMaintime
    时遗漏了一个参数吗?

    这是一个问题。我不知道有一个代码审查站点,我也会以分钟或秒为单位计算时间,将其添加到当前客户端的机器时间中,然后轮询一个是否大于另一个。您只需确保每次服务器请求(AJAX、常规页面请求等)都会更新该时间,以使会话保持活动状态。将其保存在cookie中可能是最简单的方法。这是一个问题。我不知道有一个代码审阅站点。我也会以分钟或秒为单位计算时间,将其添加到当前客户端的计算机时间中,然后轮询以查看其中一个是否大于另一个。您只需确保每次服务器请求(AJAX、常规页面请求等)都会更新该时间,以使会话保持活动状态。将其保存在cookie中可能是最简单的方法。我认为mousedown()效果更好。它适用于标准的点击和拖放…我刚刚编辑了我的问题,以显示缺少的参数,并在脚本检测到用户鼠标活动时清除计时器。这就是你的意思吗?我认为mousedown()更好用。它适用于标准的点击和拖放…我刚刚编辑了我的问题,以显示缺少的参数,并在脚本检测到用户鼠标活动时清除计时器。这就是你的意思吗?