如标题中所述,当我设置[php中30分钟的会话超时]时,我的数据库表trace_users
没有得到更新,尽管会话超时为6分钟时]表已更新。
以下代码(JS和PHP)
位于同一php文件mno.php中。<?php if (isset($_GET['action']) && $_GET['action'] == "logout") { 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(); } ?> <script> jQuery(document).ready(function($) { let lastActivity = <?php echo time(); ?> ; let now = <?php echo time(); ?> ; let logoutAfter = 10; 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秒)时,db表也应该更新]。
在设置1800秒会话超时时,页面会注销,但是db表不会更新。
Case1(不起作用):
1800秒(页面注销,db不更新)Case2(正在运行): 360秒(页面注销,数据库已更新)session.gc_maxlifetime内部的值为1440(本地值)1440(主值)
这是我调试过的内容:
在网络选项卡上,将会话超时设置为6分钟和60分钟
时,我正在获取请求方法GET。如标题中所述,当我在php中将会话超时设置为30分钟时,我的数据库表trace_users不会得到更新,尽管在会话超时为6分钟时表也会更新。以下...
问题是您没有更改将阻止会话在N秒后过期的任何内容,您只是在编写脚本,其方式是在此时间之后将破坏会话。会话gc(垃圾收集器)会定期执行并删除旧的会话,一旦发生,$_SESSION['LAST_ACTIVITY']
也将被删除。
您必须尝试防止gc删除会话或更改应用程序中的逻辑。