【发布时间】:2020-04-19 01:26:35
【问题描述】:
我有一个如下所示的 php 代码,其中会话超时发生在 60 分钟后没有活动时。以下代码位于文件 /mno.php 中。我的login and logout code也在同一个文件/mno.php中。
/mno.php
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 3600)) {
session_destroy(); // destroy session data in storage
!isset($_SESSION['pageadmin']);
/* Update Table (START) */
$open="false";
$stmt= $connect->prepare("UPDATE trace_users SET open=? WHERE user_name=?");
$stmt->bind_param('ss', $open, $_SESSION['user_name']);
$stmt->execute();
/* Update Table (END) */
header('location: /mmo.php');
exit();
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
代码中的 trace_users 表跟踪所有登录用户。在该表中,有两列 user_name 和 open。当任何用户登录/注销时,该值设置为true/false。
我已包含 sql 查询,我在其中尝试在没有活动时更新表,但不幸的是,该特定用户的列值未设置为 false 当 60 分钟内没有活动发生时。
这是我尝试过的:
在做了一些研究之后,我想我必须运行一个计时器(js/ajax)。在下面显示的 javascript 中,我计算了 Last Activity 和 Current time 之间的差异。 如果超过 60 分钟,那么它将更新一个数据库表。这是我尝试过的,但我相信需要做更多工作才能更新数据库中的表。
<script>
let x = setInterval(function() {
let lastActivity = <?php echo ($_SESSION['LAST_ACTIVITY']); ?>
let now = <?php echo time() ?>;
let difference = now - lastActivity;
if (difference > 3600) {
clearInterval(x);
}
}, 1000
);
</script>
问题陈述:
我想知道我应该在上面的 js(或 php)代码中进行哪些更改,以便在 60 分钟内没有活动时,它应该将列 open 更新为 false(在表 trace_users 中)用于该特定用户。
编辑 1:
我的登录代码和会话历史代码在同一个文件 /mno.php 中。我已将所有内容放在同一个文件 /mno.php 中。
【问题讨论】:
标签: javascript php sql ajax session-timeout