【问题标题】:Issues with PHP 5.3 and sessions folderPHP 5.3 和会话文件夹的问题
【发布时间】:2011-02-23 16:40:04
【问题描述】:

我最近升级到 PHP 5.3,从那以后我收到(零星的)错误消息,表明 Apache(或者可能是会话文件的更清洁者)对存储会话的文件夹没有权限。
这是随机发生的,无法通过精确的步骤重现,这让我猜测它是会话清洁器。
有人遇到过此类错误吗?

错误消息(在session_start() 行触发)是:

ps_files_cleanup_dir: opendir(/var/lib/php5) 失败: 权限被拒绝。

会话目录上的ls -ltr给出:

drwx-wx-wt  2 root          root          4096 2010-05-25 12:39 php5

在这个目录中,我确实看到了属于我的 Apache 的 www-data 拥有的会话文件,并且该应用程序运行良好。 这让我想知道,session GC 在哪个用户下运行?

【问题讨论】:

  • 我做了,但不是在 5.3 上。原来是过滤到会话保存路径的权限错误。我假设你已经检查了权限?
  • @Jarrod 我看到 www-data 可以读取和写入该文件夹(现在每个人、用户、组和世界都有 w & r)我应该检查其他内容吗?
  • 我猜它偶尔发生的原因是在运行会话垃圾收集器时发生错误,我认为默认情况下每个会话初始化运行的机会为 1%。您是否对有关会话的 php.ini 进行了任何更改?这里的默认值之外是什么?检查会话文件夹的所有者,之后我不知所措,没有看到 .ini 或错误。
  • 所有者是root,会话由www-data创建,每个人都可以访问这个文件夹。我会一一检查ini设置,寻找可疑之处。
  • ps_files_cleanup_dir: opendir(/var/lib/php5) 失败:权限被拒绝(

标签: php session


【解决方案1】:

修复方法:在您的 php.ini 中将 session.gc_probability 设置为 0

原因 我相信我在这里找到了答案http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

本质上,垃圾收集设置为由某些系统(即 Ubuntu/Debian)上的 cron 作业完成。一些 php ini 可执行文件(如 php-cli)也尝试进行垃圾收集,这会导致您遇到错误。

【讨论】:

  • 我在 Ubuntu 10.04 上也遇到了这个问题,但是在检查 php.ini 时我发现 session.gc_probability 已经设置为 0
  • @Jonathan - 您可能会发现您的应用程序正在设置该值。
  • @SynackSA 奇怪的是,当我创建一个自定义的、站点特定的 php.ini 文件时,session.gc_probability 触发为 1。即使在 php.ini 中没有设置时也会发生这种情况文件随便!我在 Ubuntu、Apache 2.2 上运行 suphp。我想知道这是否是某种类型的错误。无论如何,将 session.gc_probability = 0 添加到我的自定义站点特定 php.ini 文件似乎可以解决问题。
  • @Jonathan 这就是它的工作方式,因为默认值为 1
  • 这会禁用会话垃圾收集。您可能应该检查是否真的有一个 cron 清理您的会话。
【解决方案2】:

这似乎是 Ubuntu 服务器上的一个典型错误(我使用的是 Lucid LTS)。 /var/lib/php5目录的默认权限有

drwx-wx-wt  2 root     root     4096 2011-11-04 02:09 php5

所以它可以被 Web 服务器写入但不能读取,我想这可以解释错误。

由于 Ubuntu 通过 cron (/etc/cron.d/php5) 有自己的垃圾清理功能,因此最好按照 Diwant Vaidya 的建议禁用 php 的垃圾收集。

session.gc_probability = 0

会话文件夹不应该是世界可读的实际上是有原因的 - 正如PHP Manual 所说:

如果您将此设置保留为世界可读的目录,例如 /tmp( 默认),服务器上的其他用户可能能够通过以下方式劫持会话 获取该目录中的文件列表。

【讨论】:

    【解决方案3】:

    我目前使用的解决方案(我不确定是否正确)是将会话文件夹的所有权授予 Apache 用户(在我的情况下为 www-data)。

    【讨论】:

    • 正如 Marie 上面提到的,这可能会给任何生产服务器带来安全问题。
    • 我早就实施了正确的解决方案 :-) 但是,安全问题主要在共享服务器中
    • @pike 会话清理由 php cli 通过 CRON 处理
    【解决方案4】:

    这个问题困扰了我一段时间。我按照 php.ini 中的建议更改了值,并且问题不断发生。我在 index.php 和 private/Zend/session.php 中发现了相同的配置值。因此,如果问题不断发生,则值得深入研究。我希望这对某人有用。

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      相关资源
      最近更新 更多