PHP5.3和会话文件夹的问题

PHP5.3和会话文件夹的问题,php,session,Php,Session,我最近升级到PHP5.3,从那以后,我收到(零星的)错误消息,表明Apache(或可能是会话文件的清理者)对存储会话的文件夹没有权限。 这是随机发生的,不能用精确的步骤复制,这让我猜测这是会话清理器。 有人有过这种错误的经历吗 错误消息(在会话\u start()行上触发)为: ps\U文件\U清理\U目录: opendir(/var/lib/php5)失败: 拒绝许可 会话目录上的ls-ltr提供: drwx-wx-wt 2 root root 4096

我最近升级到PHP5.3,从那以后,我收到(零星的)错误消息,表明Apache(或可能是会话文件的清理者)对存储会话的文件夹没有权限。
这是随机发生的,不能用精确的步骤复制,这让我猜测这是会话清理器。
有人有过这种错误的经历吗

错误消息(在
会话\u start()
行上触发)为:

ps\U文件\U清理\U目录: opendir(/var/lib/php5)失败: 拒绝许可

会话目录上的ls-ltr提供:

drwx-wx-wt  2 root          root          4096 2010-05-25 12:39 php5
在这个目录中,我确实看到了www data拥有的会话文件,它是我的Apache,并且该应用程序运行良好。
这让我想知道,会话GC在哪个用户下运行?

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

修复:
php.ini
中设置
session.GC\u>到
0

原因 我相信我在这里找到了答案


本质上,垃圾收集是由一些系统(如Ubuntu/Debian)上的cron作业完成的。一些PHPINI可执行文件(如PHPCLI)也尝试执行垃圾收集,这会导致出现错误

这似乎是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
实际上,会话文件夹不应该是全世界可读的,这是有原因的,正如

如果将此集合保留到世界可读目录,例如/tmp( 默认情况下),服务器上的其他用户可以通过 正在获取该目录中的文件列表


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

我做了,但不是在5.3上。原来是一个权限错误,已向下过滤到会话保存路径。我想你已经检查了权限?@Jarrod我看到www数据可以读写到那个文件夹(现在每个人、用户、组和世界都有w&r)我应该检查其他东西吗?我猜偶尔发生这种情况的原因是会话垃圾收集器运行时出错,我认为在默认情况下,每个会话初始化运行的几率为1%。您是否对php.ini中的会话进行了任何更改?这里的默认值之外是什么?检查会话文件夹的所有者,之后我会不知所措,看不到.ini或错误。所有者是root,会话是由www数据创建的,每个人都可以访问此文件夹。我将逐一检查ini设置,查找可疑的内容。ps_files_cleanup_dir:opendir(/var/lib/php5)failed:Permission denied(正如Marie上面提到的,这可能会给任何生产服务器带来安全问题。我早就实现了正确的解决方案:-),但是,安全问题主要是共同的servers@pike会话清理由php cli通过CRONI处理。我在Ubuntu 10.04上也遇到了这个问题,但是在检查php.ini时,我发现
session.gc\u probability
已经设置为
0
@Jonathan-您可能会发现您的应用程序正在设置该值。@SynackSA奇怪的是,当我创建一个自定义的、特定于站点的php.ini文件时,
session.gc\u probability
触发为1。即使php.ini文件中没有任何设置,也会发生这种情况!我在Ubuntu、Apache2.2上运行suphp。我想知道这是否是某种类型的错误。无论如何,将
session.gc_probability=0
添加到我的自定义、特定于站点的php.ini文件似乎可以解决这个问题。@Jonathan这就是它的工作方式,默认值为1。此操作将禁用会话垃圾收集。您可能需要检查是否确实有一个cron正在清理您的会话。