cakephp - 通知(8): session_start() at CakePHP 2. 2

标签 cakephp cakephp-2.0 cakephp-2.1 cakephp-2.2

偶尔,当我加载一个页面时,它会显示此错误:

Notice (8): session_start(): ps_files_cleanup_dir: opendir(C:\Windows\TEMP) failed: No such file or directory (2) [CORE\Cake\Model\Datasource\CakeSession.php, line 615]

我使用的是 CakePHP 2.2。 这是怎么回事??

最佳答案

PHP 中有一个 session 垃圾收集器,它有可能在访问 PHP 站点时执行。这是在 php.ini 中定义的:

session.gc_probability
session.gc_divisor
session.gc_maxlifetime
session.save_path

http://www.php.net/manual/en/session.configuration.php

如果位于 save_path 中的 sess_ 文件早于 gc_maxlifetime,则您有 gc_probability/gc_divisor 机会被删除。

默认情况下 session.save_path 在 Windows 服务器上设置为 C:\Windows\Temp。我怀疑这几乎总是存在的。

您需要为执行 PHP 脚本的任何帐户(如果我们正在谈论 IIS,则默认为 IUSR)授予高级安全下的“列出文件夹”权限。 PHP 使用此权限列出 C:\Windows\Temp(或您配置的任何位置)中的文件,以确定它需要解析的 sess_ 的实际名称。然后它将遍历这些文件中的每一个,如果修改日期早于 maxlifetime 它将删除该文件。它具有默认情况下所需的所有权限 except 列表文件夹。奇怪的是,IIS_IUSRS(我相信是一个用于应用程序池的组)被授予了这个权限,但没有被授予 IUSR。

如果你好奇,IUSR 能够创建那些 sess_ 文件,因为“用户”被授予遍历文件夹权限和创建文件权限(到目前为止,它从未执行过列表操作)。看来,IUSR 是 Authenticated Users 或执行测试的 Users 组的不言而喻的成员 here .还有一个特殊的“CREATOR OWNER”权限集,赋予所有者对他们创建的文件的完全权限。这是IUSR获得实际删除文件的特​​权的地方。这有点令人费解,但您唯一需要担心的是“列表文件夹”。

关于cakephp - 通知(8): session_start() at CakePHP 2. 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13123615/

相关文章:

Cakephp 2.0 模型消息本地化

CakePHP - loginAction 的绝对 URL

sql - 在 Cakephp 中使用不同的查询查找所有内容

jquery - cakephp 渲染元素与数据

php - CakePHP和用户登录功能

unit-testing - 使用枚举的 CakePHP 测试的解决方法?

php - Cakephp 读写json文件。

Cakephp Auth 组件,同一浏览器中的多个用户角色 session

cakephp - 为什么我们需要 CakePHP HTML 链接助手?

php - 使用多个条件更新 cakephp 中的查询