如标题中所述,当 30 分钟内没有任何活动发生时,数据库表trace_users不会更新,但在 6 分钟内会更新。
以下代码(JS 和 PHP)位于同一个 php 文件mno.php中。
我通过let lastActivity = <?php echo time(); ?> ; 下面脚本中的这一行存储用户的最后一个活动。
<?php
session_start();
if (isset($_GET['action']) && $_GET['action'] == "logout")
{
session_destroy(); // destroy session data in storage
!isset($_SESSION['admin']);
$open = "false";
$write = "0";
$stmt = $connect->prepare("UPDATE trace_users SET open=?, write=? WHERE user_name=?");
$usname = !empty($_SESSION['user_name']) ? $_SESSION['user_name'] : '';
$stmt->bind_param('sss', $open, $write, $usname);
$stmt->execute();
}
?>
<script>
jQuery(document).ready(function($) {
let lastActivity = <?php echo time(); ?> ; // storing last activity of user
let now = <?php echo time(); ?> ;
let logoutAfter = 360;
let timer = setInterval(function() {
now++;
let delta = now - lastActivity;
console.log(delta);
if (delta > logoutAfter) {
clearInterval(timer);
//DO AJAX REQUEST TO close.php
$.ajax({
url: "/abc/mno.php",
type: 'GET',
data: {
action: 'logout'
}, // Line A
success: function(data) {
console.log(data); // Line B
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
});
}
}, 1000);
});
</script>
问题陈述:
我想知道我应该在上面的代码中进行哪些更改,以便在 30 分钟(1800 秒)内没有任何活动发生时,数据库表也应该得到更新。
Case1(不工作): 1800 秒(页面注销,数据库不更新)
Case2(工作): 360 秒(页面注销,数据库更新)
session.gc_maxlifetime 里面的值是 1440(Local Value) 1440(Master Value)
这是我尝试过/调试过的:
在网络选项卡上,当会话超时设置为6 mins和60 mins时,我得到 Request Method GET。
至尊宝的传说
不负相思意
郎朗坤
小唯快跑啊
相关分类