此代码需要刷新或单击页面才能转到索引页面,并且在 session 过期后更新数据库。
我怎样才能自动让它在 session 过期后更新数据库,这样用户事件将为 0 而无需刷新或单击页面?
$idletime = 3600; //after 1hr the user gets logged out
if (time() - $_SESSION['timestamp'] >= $idletime){
$online = "UPDATE users SET active = 0 WHERE username = '".$_SESSION['username']."'";
mysqli_query($con, $online);
session_destroy();
header("Location:index.php");
} else {
$_SESSION['timestamp'] = time();
}
最佳答案
最好的选择是不要在数据库中使用事件/非事件标志,而是使用类似 last_active
的东西时间戳。当用户访问页面时,更新时间戳为CURRENT_TIMESTAMP()
.并确定用户当前是否处于事件状态,查询 WHERE active_timestamp < TIMESTAMPADD(MINUTE, -60, CURRENT_TIMESTAMP())
确保设置 active_timestamp
作为DATETIME
输入表结构。 ( ALTER TABLE users ADD COLUMN active_timestamp datetime AFTER username'
)
这里的问题是您的脚本看起来想要在 session 空闲时将用户踢出。为此,您应该查看 JavaScript,设置一个倒计时超过 1 小时的计时器,如果没有事件,则重定向页面。
关于php - 如何在 session 过期后自动更新数据库而不刷新我的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29987521/