[db表未在php中的会话超时上更新

问题描述 投票:0回答:1

我有一个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(...

javascript php ajax post session-timeout
1个回答
0
投票
问题是您没有更改将阻止会话在N秒后过期的任何内容,您只是在编写脚本,其方式是在此时间之后将破坏会话。会话gc(垃圾收集器)会定期执行并删除旧的会话,一旦发生,$_SESSION['LAST_ACTIVITY']也将被删除。

您必须尝试防止gc删除会话或更改应用程序中的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.