![PHP Sessions 目录已满并溢出](https://linux22.com/image/640461/PHP%20Sessions%20%E7%9B%AE%E5%BD%95%E5%B7%B2%E6%BB%A1%E5%B9%B6%E6%BA%A2%E5%87%BA.png)
运行 PHP、Apache2……我们的登录停止工作,任何试图获取会话数据的东西都停止工作。昨晚 7 点,一切都随机停止工作。我发现会话目录每秒都被大量会话填满。如果我删除所有会话,它很快就会再次填满。访问日志由于某种原因停止工作。这听起来像是一次攻击吗……如果是,我该怎么做才能阻止它?
答案1
听起来您用来关闭会话的代码不起作用或不存在。您需要使用以下命令销毁会话:
销毁所有会话:
<?php
session_destroy();
?>
或者使用它来摧毁个别的碎片:
<?php
if(isset($_SESSION['views']))
unset($_SESSION['views']);
?>
摘自这里:W3Schools PHP 会议
答案2
如果您的日志无法正常工作,则您的磁盘空间似乎不足。错误日志中没有任何内容?
http://php.net/manual/en/session.configuration.php
检查您的会话生存期 - 如果太长,服务器可能会保留文件直到磁盘写满。
另外,检查 gc 设置、概率、除数和生存期,并尝试将它们设置为默认值,看看情况是否得到改善。GC(垃圾收集器)以 1% 的请求运行,并清理旧的未使用会话。如果它不起作用或关闭,那么您的磁盘将在某个时候填满。
导致文件过多的另一个原因可能是 session.auto_start 设置为 1;在这种情况下,您可能在不需要会话时初始化会话 - 但是它们不会占用太多空间。或者您可能在每次请求时都执行 session_start,无论您是否需要它。
答案3
我会调查 3 个问题:
-会话开始:您是否只在需要时使用会话?也许您在不需要会话的部分启动了会话。这会浪费资源并降低网站速度。
-会话生存期:如果生命周期过长或为 0,则陈旧的会话将占满所有磁盘空间,只要有足够的时间。请查看session.gc-maxlifetime有关如何设置的提示。
-会话终止session_destroy()
:当不再需要会话时,尝试销毁该会话。
如果磁盘空间不足,则不会写入任何会话文件,也不会更新任何日志。这将禁用您的登录系统,而您的用户将继续尝试登录,从而使影响更加严重。
尝试释放一些磁盘空间并查看日志。大量对不常见资源的请求可能表明您受到了攻击。如果您清理空间并且一切恢复正常,则您发现了问题。如果会话数量持续增加,则您可能受到了攻击。