2012-10-29 55 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'',瞧它有效!謝謝!!! –