在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获得实际删除文件的权限的地方。这有点复杂,但你唯一需要担心的是'列表文件夹'。
我不知道很多关于CakePHP的,但要指出的是,如果你使用“CakePHP的/ tmp目录”使*确保*用户不能浏览/阅读/在这里访问文件,因为它是可能的他们可以获得会话ID并劫持某人的会话。如果/ tmp用于用户必须访问的其他文件,这可能不是一个好选择。 – Gremio
我刚刚将'defaults'=>'php''改为''defaults'=>'cake'',瞧它有效!谢谢!!! –