2012-10-29 29 views
3

随机,不时,当我加载页面它显示这样的错误:使用CakePHP 2.2通知(8):在session_start()在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] 

林。 这里发生了什么?

回答

1

似乎将保存会话文件的目录设置为php.ini中不存在的目录。所以要么创建它所抱怨的目录,要么为sesssion.save_path php config指定另一个目录。

7

在PHP中有一个会话垃圾回收器,每当访问PHP站点时都有可能执行。这是在php.ini定义为:

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

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

你有gc_probability/gc_divisor的机会,如果他们比gc_maxlifetime年长地处save_path的sess_ <PHPSESSID>文件被删除。

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

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

如果您好奇,IUSR能够创建这些sess_ <PHPSESSID>文件,因为“用户”被授予遍历文件夹权限并创建文件权限(直到此时它从不执行列表操作)。看起来,IUSR是Authenticated Users或来自执行测试here的用户组的潜在成员。还有一个特殊的“CREATOR OWNER”权限集,可以让所有者完全拥有他们创建的文件的权限。这是IUSR获得实际删除文件的权限的地方。这有点复杂,但你唯一需要担心的是'列表文件夹'。

1

您可以在Config/core.php中更改cackphp中的会话保存路径。

检查该文件中的注释。

* The built in defaults are: 
* 
* - 'php' - Uses settings defined in your php.ini. 
* - 'cake' - Saves session files in CakePHP's /tmp directory. 
* - 'database' - Uses CakePHP's database sessions. 
* - 'cache' - Use the Cache class to save sessions. 
* 
* To define a custom session handler, save it at /app/Model/Datasource/Session/<name>.php. 
* Make sure the class implements `CakeSessionHandlerInterface` and set Session.handler to <name> 
* 
* To use database sessions, run the app/Config/Schema/sessions.php schema using 
* the cake shell command: cake schema create Sessions 
* 
*/ 
    Configure::write('Session', array(
     'defaults' => 'cake' 
    )); 
+0

我不知道很多关于CakePHP的,但要指出的是,如果你使用“CakePHP的/ tmp目录”使*确保*用户不能浏览/阅读/在这里访问文件,因为它是可能的他们可以获得会话ID并劫持某人的会话。如果/ tmp用于用户必须访问的其他文件,这可能不是一个好选择。 – Gremio

+0

我刚刚将'defaults'=>'php''改为''defaults'=>'cake'',瞧它有效!谢谢!!! –