我有一个使用ajax的web应用程序,每10秒执行一次以更新一些数据。 我设置了一个PHP会话,在60分钟不活动后,php会话终止并将用户踢出页面,但在此页面中会话永不过期,我想这是因为Ajax调用每10秒执行一次,服务器刷新“超时“,我的会话在我不执行ajax的其他页面中工作正常。你们认为我在这个页面的问题是因为ajax每10秒调用一次吗?
我的Jquery代码:
delay(function(){
check();
}, 10000 );
function check()
{
$.ajax({
dataType: "json",
url: "lead.php",
cache: false,
success: function(msg){
//Do something
}
});
}
答案 0 :(得分:2)
如果您想在X时间之后关闭会话,无论是否正在进行ajax请求,但只有当用户在页面上没有活动时,您才能使用我正在使用的代码:
(function () {
// After 30 minutes without moving the mouse, the user will be redirect to logout page
var time2refresh = 30;
// This is how many time the user has to be inactive to trigger the countdown of 30 minutes
var timeInactive = .5;
// This will store the timer in order to reset if the user starts to have activity in the page
var timer = null;
// This will store the timer to count the time the user has been inactive before trigger the other timer
var timerInactive = null;
// We start the first timer.
setTimer();
// Using jQuery mousemove method
$(document).mousemove(function () {
// When the user moves his mouse, then we stop both timers
clearTimeout(timer);
clearTimeout(timerInactive);
// And start again the timer that will trigger later the redirect to logout
timerInactive = setTimeout(function () {
setTimer();
}, timeInactive * 60 * 1000);
});
// This is the second timer, the one that will redirect the user if it has been inactive for 30 minutes
function setTimer() {
timer = setTimeout(function () {
window.location = "/url/to/logout.php";
}, time2refresh * 60 * 1000);
}
})();
所以这个函数的逻辑是:
1)用户登录您的站点 2)在0.5分钟(30秒)不活动后,将开始30分钟的倒计时 3)如果用户移动他的鼠标,则两个计时器都被重置,第一个计时器重新开始。 4)如果30分钟后用户没有移动鼠标,那么它将被重定向到退出页面,关闭他的会话。
答案 1 :(得分:0)
我猜lead.php
使用session_start()
。您只能在该文件中删除它。
或者,在首次初始化时,将当前时间保存到会话var,然后为每次调用检查是否已超过一小时。如果为true,session_destroy()