20分钟后,Javascript超时无效

时间:2018-01-11 12:41:30

标签: javascript session zend-framework refresh settimeout

我试图建立一个机制来刷新使用Zend Framework 1的网站上的用户会话。目标是使会话比现在更长(PHP会话为30分钟) 。我有一个机制,可以在超时之前刷新PHP会话。我通过AJAX调用触发它:

$.ajax({
   url: "<?=$this->baseUrl()?>/index/keep",
   type: "POST",
   dataType: "json",
   success: function (result)
   { ... }
});

此调用由一个函数完成,该函数首先使用PHP和会话cookie检查页面上最后一个用户的操作,然后将其与实际时间进行比较。

var startT=new Date;
var korekta=<?=time();?>-startT.getTime()/1000;
var refreshCount = 0;
var refreshTime = 3; // [min]
var warningTime = 17; // [min]
var logoutTime = 19; // [min]
var min2seconds = 60;
var functionRefresh = 30; // [s]

以上是加载页面时正在设置的此函数的一些参数。下面我将展示函数代码,该代码检查上一次操作的时间是否比参数中设置的时间长(warningTime,logoutTime)。通过warningTime后,网站会显示警告,用户可以继续(手动刷新会话)或注销。传递logoutTime后,用户被强制注销。

var t=c.substring(name.length, c.length);
var now=new Date;
var tt=(now.getTime()/1000)-t+korekta;

if(tt > min2seconds*warningTime)
{

        $('#logoutPopup').dialog(
        {
            modal: true,
            maxWidth: '70%',
            width:'60%',
            title: "Session expires",
            buttons:
            {
                "Continue": function()
                {
                    $( this ).dialog( "close" );
                    $.ajax({
                        url: "<?=$this->baseUrl()?>/index/keep",
                        type: "POST",
                        dataType: "json",
                        success: function (result )
                        { refreshCount = 0;}
                    });
            },
            "Logout": function()
            {
                $( this ).dialog( "close" );
                window.location.href="<?=$this->baseUrl()?>/index/logout";
            }
            }
        });
}

if(tt > min2seconds*logoutTime)
{
    window.location.href="<?=$this->baseUrl()?>/index/logout";
}
else if( tt > (refreshCount+1) * min2seconds*refreshTime )
{
    refreshCount++;
    $.ajax({
        url:        "<?=$this->baseUrl()?>/index/refresh",
        type:       "POST",
        dataType:   "json",
        success: function(result)
        {console.log("Refreshed " + refreshCount.toString() + " times.");}
    });
}

$.ajax({
    url: "<?=$this->baseUrl()?>/index/blank",
    type: "GET",
    dataType: "json",
    success: function (result )
    { }
});

使用以下命令每30秒调用此代码的工作函数:

setTimeout(checkLastActivity,functionRefresh*1000);

其中 checkLastActivity 是此函数的名称。当时间设置在20分钟以下时,整个机制完美运行。之后,javascripts停止调用此功能,我不知道为什么。我使用console.log函数在每个 checkLastActivity 函数调用上打印实际时间,并打印到~20分钟。其他javascript / jquery函数在页面上工作,只需停止...

我添加了额外的AJAX调用,调用 index 控制器的空白操作。这只是解决类似问题的方法之一。在这种情况下,没有帮助。

总结:目标是在 warningTime 设置为例如 warningTime 时使此功能正常工作。 35分钟。

0 个答案:

没有答案