如何在会话过期后自动更新数据库而不在页面上刷新

Jay*_*uan 3 php mysql 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();
}
Run Code Online (Sandbox Code Playgroud)

Kev*_*ski 5

最好的选择是不在数据库中使用活动/非活动标志,而是使用类似last_active时间戳的东西.当用户访问页面时,将时间戳更新为CURRENT_TIMESTAMP().并确定用户当前是否处于活动状态,查询WHERE active_timestamp < TIMESTAMPADD(MINUTE, -60, CURRENT_TIMESTAMP())

确保在表结构中设置active_timestampDATETIME类型.(ALTER TABLE users ADD COLUMN active_timestamp datetime AFTER username')

这里的问题是你的脚本看起来想要在会话空闲时踢出用户.为此,您应该查看JavaScript,设置一个倒计时超过1小时的计时器,如果没有活动,则重定向页面.