我试图建立一个机制来刷新使用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分钟。