PHP会话随机到期

时间:2019-04-04 18:57:53

标签: php html

首先,我想解释一下我要完成的工作。 因此,我有一个系统,如果用户登录,其用户名将存储在$_SESSION['username']中。在每个页面上,我都有session_start();,然后经常查看if(isset($_SESSION['username']))以显示不同的内容。

这一切都很好用,除了会话在超时之前到期或在超时之前未设置$_SESSION['username']变量(导致系统认为用户需要注销)之外。我真的想补充一下,这种情况随机发生!

我可以在网站上花费10分钟,而互动之间的间隔是不同的,但没有任何反应,接下来我知道,我会在3分钟内被踢出两次。

我可以验证session.cookie_lifetime = 0(这意味着它将在浏览器关闭之前不会过期)和session.gc_maxlifetime = 1200(这无关紧要,因为我已将会话保存文件夹设置在与tmp不在同一位置。

我唯一想到的可能是一个问题,是在验证密码后在登录部分输入以下代码:

$_SESSION['username'] = $usernameInput;
session_write_close();
header("Location: index.php");

我知道使用标头意味着会话变量不会被保存,因为它剪切了文档,但这就是为什么我使用session_write_close();保存这些变量的原因。并且请记住:此后一切正常!进入index.php后,我可以看到我的用户名。

有些SO线程会导致用户将会话变量和内容保存在数据库中,但是我宁愿对其进行修复而不必这样做。

编辑: 因此,我重新引入了一个为会话超时计数的函数,该方法行之有效,但是我发现了一个问题。我查看了浏览器的network部分,并在XHR中查找了会话以及cookie和其他内容。网站对我的logout.php文件执行GET请求时,发生了一些奇怪的事情。

所以我研究了可能导致这种情况的原因。我有2个注销按钮,它们被PHP回显,并且给了它们每个不同的href链接。我将范围缩小到此PHP和HTML。上次我检查时,HTML不会自动转到其代码中的href。而且我怀疑PHP是否会这样做。

if(isset($_SESSION['username'])){
            echo "<div class='navProfile navButton'><img class='navProfileIcon' src='images/angerypigeon.jpg' alt=''><h3 class='navProfileUsername'>" . $_SESSION['username'] . "</h3><h3 class='navProfilePosts'>Posts: 102</h3><a class='navProfileLogout' href='php_tools/logoutbutton2.php'>Logout</a></div>";
            echo "<button class=\"modalButton upload navButton\" id=\"uploadButton2\" type=\"button\" name=\"button\" style=\"margin-left: auto\">Upload</button>";
        }
        else {
            echo "<button class='navButton' type=\"button\" name=\"button\" onclick=\"location.href = 'login.php'\">Login</button>";
        }

当我在浏览器中检查XHR字段时,它将发送针对logoutbutton2的GET请求。 如何防止这种情况发生?我自己单击按钮。它是随机发送的。

3 个答案:

答案 0 :(得分:0)

由于我看不到所有代码,因此只能推测。 什么可能会在“随机”情况下终止会话。

也许你有

  • 代码中类似$ _SESSION ['username'] =''或$ _SESSION =''之类的东西。再次检查。
  • 一些代码专家在session_start前面吐出一些字符?
  • 一个奇怪的启发式adblock-privacy-whatnot-browser插件阻止了您的会话Cookie
  • 您端的防病毒防火墙会杀死一些启发式cookie
  • 服务器上的某些清理作业会终止会话(非常不可能)
  • 服务器上的某些防病毒程序杀死了会话(非常不可能)
  • 您是公司线程管理网关的支持者吗,那些东西会吃掉饼干(极不可能)
  • 某些东西随机崩溃并重新启动服务器,并杀死途中的会话(极不可能)
  • javascript可能会干扰您的会话cookie(非常不可能)

答案 1 :(得分:0)

首先,检查您的请求标头中是否正确设置了SET-COOKIE。检查生存期(客户端)。


有时关于用户会话的文件未正确创建。检查您的session_save_path并检查此文件夹是否创建了新文件。

答案 2 :(得分:0)

问题似乎已经解决。这确实是一个随机且不可预测的事情。

相关问题