此代码需要刷新或单击页面才能进入索引页面,然后在会话过期后更新数据库.
如何在会话过期后自动更新数据库,以便用户激活为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)
最好的选择是不在数据库中使用活动/非活动标志,而是使用类似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')
这里的问题是你的脚本看起来想要在会话空闲时踢出用户.为此,您应该查看JavaScript,设置一个倒计时超过1小时的计时器,如果没有活动,则重定向页面.
| 归档时间: |
|
| 查看次数: |
1737 次 |
| 最近记录: |