PHP Sessions 目录已满并溢出

PHP Sessions 目录已满并溢出

运行 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():当不再需要会话时,尝试销毁该会话。

如果磁盘空间不足,则不会写入任何会话文件,也不会更新任何日志。这将禁用您的登录系统,而您的用户将继续尝试登录,从而使影响更加严重。

尝试释放一些磁盘空间并查看日志。大量对不常见资源的请求可能表明您受到了攻击。如果您清理空间并且一切恢复正常,则您发现了问题。如果会话数量持续增加,则您可能受到了攻击。

相关内容