在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'',瞧它有效!謝謝!!! –