我使用登录/注销创建网站。
如果在网络上按任何链接或按钮,我会调用ajax函数来检查登录,如果时间已过期注销用户。在注销功能中,我更新了我的数据库。
但如果我关闭浏览器或页面用户未注销且数据库未更新。如何为它添加事件监听器。
PHP文件
if (isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch ($action) {
case "checkLogin":
echo isLogged();
break;
case "logout":
logout();
break;
//and more
}
}
function isLogged() {
$data = array(
"login" => 0,
"username" => "null"
);
if(isset($_SESSION["user"]) && isset($_SESSION["start"])) {
$session_start = $_SESSION["start"];
//more then 600 sec
if(time() - $session_start < 600){
$data = array(
"login" => 1,
"username" => $_SESSION["user"]
);
}else{
logout();
}
}
return json_encode($data);
}
function logout(){
if(isset($_SESSION["user"])) {
$connection = connectToDB();
if($connection != null) {
$nickname = $_SESSION["user"];
$time = date("Y-m-d H:i:s");
$sql_statement = "UPDATE users SET is_login='0',last_login='$time' WHERE username='$nickname';";
$connection->query($sql_statement);
}
session_destroy();
}
}
答案 0 :(得分:0)
没有万无一失的方式来“关闭”用户关闭你的窗户,或者正如@Taplar指出的那样,关闭他们的电脑。使用在this question中描述的会话中存储登录时间的技术,您可以运行cron或其他类型的后台任务,检查数据库中是否有到期的会话,然后在那里使它们到期。
答案 1 :(得分:0)
您可以使用 async - false添加卸载侦听器,以便浏览器在请求未完成时等待:
$(window).unload(function() {
$.ajax({
type: 'GET',
url: '/logout',
async: false
});
});
请注意,浏览器会挂起&#34;在请求期间,它可能会混淆用户