繁体   English   中英

PHP会话随机过期

[英]PHP session randomly expires

开始我想解释一下我想要完成的事情。 所以我有一个系统,如果用户登录,他们的用户名将存储在$_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");

我知道使用header意味着会话变量不会被保存,因为它会删除文档,但这就是我使用session_write_close(); 保存这些变量。 请记住:此后一切正常! 一旦到达index.php,我就可以看到我的用户名。

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

编辑:所以我重新引入了一个函数来计算会话超时,这是有效的,但我已经发现了。 我查看了浏览器的network部分,在XHR我查找会话和cookie以及其他内容。 网站对我的logout.php文件发出GET请求时会发生奇怪的事情。

所以我看看可能导致这种情况的原因。 我有两个注销按钮,由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请求。 我怎样才能防止这种情况发生? 我自己没有点击按钮。 它随机发送。

由于我无法查看我只能推测的所有代码。 有什么可能在“随机”中杀死会话。

也许你有:

  • 你的代码中有$ _SESSION ['username'] =''或$ _SESSION =''之类的东西。 再次检查。
  • 有些代码在session_start前吐出一些字符?
  • 一个奇怪的启发式adblock-privacy-whatnot-browser插件会阻止你的会话cookie
  • 你端的防病毒防火墙会做一些启发式cookie杀死
  • 服务器上的一些清理工作会导致会话失败(非常不可能)
  • 服务器上的某些防病毒程序会导致会话失败(非常不可能)
  • 你是公司线程管理网关的幕后黑手,这些东西可以吃饼干(非常不可能)
  • 有些东西随机崩溃并重新启动服务器并在途中终止会话(非常不可能)
  • javascript可能会干扰你的会话cookie(非常不可能)

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


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

这个问题似乎已经解决了。 它真的是一个随机和不可预测的事情..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM