如果javascript计时器正在运行,则防止会话超时
我有一个用CodeIgniter制作的web应用程序。它的基本功能是——如果javascript计时器正在运行,则防止会话超时,javascript,php,codeigniter,session,timer,Javascript,Php,Codeigniter,Session,Timer,我有一个用CodeIgniter制作的web应用程序。它的基本功能是—— 用户登录到应用程序 用户可以执行各种任务,其中之一是基于计时器的任务。有一个按钮可以启动javascript计时器 计时器运行时,他执行某些任务,一旦完成,他就会停止计时器。计时器可能运行几分钟到几个小时 我的问题-当JavaScript定时器运行时,我们是否可以防止会话超时,这样用户就不会注销,他们的进度也不会丢失??我最初的想法是不可能,至少没有一个简单的方法,因为我们正在处理Javascript计时器(客户端)和会话
提前感谢在整个计时器会话中,每隔几分钟发送一次keepalive请求(最好是2到5分钟) 此keepalive请求将尽可能轻,只在服务器上获取会话,并使其保持活动状态 反应也会很简单,比如会话仍然是活动的之类的事情 另一方面,您还可以在javascript端usersLastActivity上维护一个变量,该变量在每个文档mousemove或文档keydown和一些事件上更新。如果自上次请求后有任何活动,请发送keepalive请求 要想了解更多信息,你可以看看其他类似的问题 最基本的例子是:
setInterval(function(){
$.get('/ImStillAlive.action');
}, 300000); // 5 mins * 60 * 1000
对于键入活动的基本检查:
$(function(){
var lastUpdate = 0;
var checkInterval = setInterval(function(){
if(new Date().getTime() - lastUpdate > 300000){
clearInterval(checkInterval);
}else{
$.get('/ImStillAlive.action');
}
}, 300000); // 5 mins * 60 * 1000
$(document).keydown(function(){
lastUpdate = new Date().getTime();
});
});
在整个计时器会话中,每隔几分钟发送一次keepalive请求(最好是2到5分钟) 此keepalive请求将尽可能轻,只在服务器上获取会话,并使其保持活动状态 反应也会很简单,比如会话仍然是活动的之类的事情 另一方面,您还可以在javascript端usersLastActivity上维护一个变量,该变量在每个文档mousemove或文档keydown和一些事件上更新。如果自上次请求后有任何活动,请发送keepalive请求 要想了解更多信息,你可以看看其他类似的问题 最基本的例子是:
setInterval(function(){
$.get('/ImStillAlive.action');
}, 300000); // 5 mins * 60 * 1000
对于键入活动的基本检查:
$(function(){
var lastUpdate = 0;
var checkInterval = setInterval(function(){
if(new Date().getTime() - lastUpdate > 300000){
clearInterval(checkInterval);
}else{
$.get('/ImStillAlive.action');
}
}, 300000); // 5 mins * 60 * 1000
$(document).keydown(function(){
lastUpdate = new Date().getTime();
});
});
您是否正在通过客户端进行
轮询
?计时器启动时,轮询服务器以保持会话alive@Rayon,这是一个针对患有某种疾病的患者的应用程序。例如,我有频繁眨眼的习惯,我想停止这种行为。为此,我运行计时器,尽量不眨眼。当我眨眼的时候,我停止计时,记下总分钟数。下一次我再试图保持这个闪烁状态。@WatsMyName,您的客户端如何理解会话超时?@Rayon,我们在计时器运行时没有ajax调用。客户端不知道会话超时。但是在codeigniter中,我们将$config['sess\u expiration']
设置为1小时。假设用户正在运行计时器,并且在服务器会话中运行时超时,在某个时间之后,用户停止计时器,这也会将数据保存到数据库中。由于会话已超时,在保存时,会话中将不会有用户信息,如用户ID等。您是否通过客户端执行轮询
?当计时器启动时,轮询服务器以保持会话alive@Rayon,这是一个针对患有某种疾病的患者的应用程序。例如,我有频繁眨眼的习惯,我想停止这种行为。为此,我运行计时器,尽量不眨眼。当我眨眼的时候,我停止计时,记下总分钟数。下一次我再试图保持这个闪烁状态。@WatsMyName,您的客户端如何理解会话超时?@Rayon,我们在计时器运行时没有ajax调用。客户端不知道会话超时。但是在codeigniter中,我们将$config['sess\u expiration']
设置为1小时。假设用户正在运行计时器,并且在服务器会话中运行时超时,在某个时间之后,用户停止计时器,这也会将数据保存到数据库中。由于会话已经超时,在保存时,会话中将没有用户信息,如用户ID等。