【发布时间】:2017-09-07 14:31:49
【问题描述】:
使用倒数计时器注销用户,如果用户处于非活动状态 2 小时..
function Timer(duration, display) {
var timer = duration, hours, minutes, seconds;
setInterval(function () {
hours = parseInt((timer /3600)%24, 10)
minutes = parseInt((timer / 60)%60, 10)
seconds = parseInt(timer % 60, 10);
hours = hours < 10 ? "0" + hours : hours;
minutes = minutes < 10 ? "0" + minutes : minutes;
seconds = seconds < 10 ? "0" + seconds : seconds;
display.text(hours +":"+minutes + ":" + seconds);
if(hours == 0 && minutes == 0 && seconds == 0){
$.ajax({
url:'../ajax/logoutuser.php',
success: function(data){
console.log('logout');
}
});
}else{
--timer;
}
}, 1000);
}
window.onload = function () {
var twentyFourHours = 1 * 1 * 3;
var display = $('#time');
Timer(twentyFourHours, display);
};
由于我不能在 jquery 函数上调用 session destroy 我使用 ajax 来发出请求..
<?php
require_once '../config/database.php';
require_once '../includes/dboperations/user.php';
$database = new Database();
$conn = $database->getConnection();
$db = new User($conn);
$user = json_decode($_SESSION["user"]);
$db->offlineStatus($user->user_id);
session_destroy();
echo "<script>window.location.href = '../index.php'</script>";
?>
但是发生的情况是,它在发出请求后并没有调用会话销毁函数。它运行 console.log 内部成功函数..
如果2小时不活动,有没有办法注销用户
【问题讨论】:
-
据我所知,您的不活动检测会强制用户刷新/重新加载页面以被视为活动。将不活动视为无动作(无鼠标移动、无按键、无点击)不是更好吗?
-
我不知道如何检查,但如果你能给我一个想法会更好,因为这就是我想要做的。
-
如果最主要的原因是客户端的某些事情(例如破坏 cookie),您可能想要使用 Javascript 解决方案(即使我个人也不喜欢它,因为客户端 Javascript 可以由用户伪造)。如果这是您想要实现的服务器端,请选择服务器端会话销毁。或两者兼而有之...我更喜欢服务器端,尽管 b/c 更安全:在您的 php 代码中记录用户活动,如果活动(发布/获取等)时间 > 最大用户空闲时间,则简单地踢用户(销毁会话)。
-
例如看看here。 SO上有很多解决方案:)
标签: javascript php jquery ajax session