我有一个php代码(位于[[/mno.php内部),其中我正在更新关于php中会话超时的数据库表。
在(A行和B行)下面的php和js代码中,我设置了30分钟(1800秒)的会话超时。后30分钟后,页面注销但是数据库表trace_users尚未更新。
当我在PHP和js中设置360秒(A和B线)会话超时值
时,它的工作就很好了(页面注销和db得到更新)。php:(/abc/mno.php)
//session
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { // Line A
session_destroy(); // destroy session data in storage
!isset($_SESSION['pageadmin']);
$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();
//header('location: https://www.mno.php');
exit();
}
else {
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
}
js:
let lastActivity = <?php echo($_SESSION['LAST_ACTIVITY']); ?>;
let now = <?php echo time() ?>;
let logoutAfter = 1800; // Line B
let timer = setInterval(function () {
now++;
let delta = now - lastActivity;
if (delta > logoutAfter) {
clearInterval(timer);
//DO AJAX REQUEST TO close.php
$.ajax({
url: "/abc/mno.php",
type: 'POST', // GET also fine
data: {},
success: function (data) {
window.location.href = './mno.php ';
},
error: function (jqXHR, textStatus, errorThrown) {
console.log("I am inside error");
alert(textStatus);
}
});
}
}, 1000); //
我想知道我应该在上面的php / js代码中进行哪些更改,以便问题陈述:
当我将会话超时设置为30分钟(1800秒)时,db表也应该得到更新
。 在设置上该页面确实注销了1800秒的会话超时,但是db表没有更新。当我将会话超时设置为30分钟(1800秒)时,POST呼叫没有发生吗?>]
Case1(不起作用):
1800秒(页面注销,db不更新)Case2(正在运行): 360秒(页面注销,数据库已更新)session.gc_maxlifetime内部的值为1440(本地值)1440(主值)我有一个php代码(位于/mno.php内),其中我正在php中会话超时时更新db表。在下面的php和js代码中(A行和B行),我为30(...
$_SESSION['LAST_ACTIVITY']
也将被删除。您必须尝试防止gc删除会话或更改应用程序中的逻辑。