2012-03-10 131 views
15

我越來越E_NOTICE錯誤在覈心CakePHP的文件時,它試圖引用一個永不設置或取消會議(cake/libs/cake_session.php line 372):

function read($name = null) { 
    if (is_null($name)) { 
     return $this->__returnSessionVars(); 
    } 
    if (empty($name)) { 
     return false; 
    } 
    $result = Set::classicExtract($_SESSION, $name); 
} 

我已經通過做了搜索我的代碼(在應用程序/目錄中),我無法找到對$_SESSIONsession_destroy的引用。我錯過了什麼?

當我嘗試運行任何單元測試時出現此錯誤。這是...正常嗎?我已經清除了cake/目錄,並將其替換爲另一個(相同版本),以確保我沒有無意中修改核心文件中的任何內容,但我仍然得到相同的錯誤。我不確定這是否僅僅是框架或其他方面的缺陷。

編輯

下面是在命令行上試運行的結果:

Welcome to CakePHP v1.3.11 Console 
--------------------------------------------------------------- 
App : app 
Path: /var/www/program/app 
--------------------------------------------------------------- 
CakePHP Test Shell 
--------------------------------------------------------------- 
Running app case models/owners_equity 
E_NOTICE: Undefined variable: _SESSION in /var/www/program/cake/libs/cake_session.php on line 372 
E_NOTICE: Undefined variable: _SESSION in /var/www/program/cake/libs/cake_session.php on line 372 
ERROR->Unexpected PHP error [Undefined variable: _SESSION] severity [E_NOTICE] in [/var/www/program/cake/libs/cake_session.php line 372] 
    in testGenerateOwnerWithdrawals 
    in BalanceTestCase 
    in /var/www/program/app/tests/cases/models/owners_equity.test.php 

ERROR->Unexpected PHP error [Undefined variable: _SESSION] severity [E_NOTICE] in [/var/www/program/cake/libs/cake_session.php line 372] 
    in testGenerateOwnerWithdrawals 
    in BalanceTestCase 
    in /var/www/program/app/tests/cases/models/owners_equity.test.php 
+1

您需要確保啓動會話: session_start(); – Ghostman 2012-03-10 21:03:23

+0

我對Cake不熟悉,但是你可以在文件的頂部(或者出錯的那一行之前的任何位置)放一個session_start()。 – 2012-03-10 21:03:33

+0

你在命令行上運行單元測試嗎?什麼是確切的錯誤信息? – 2012-03-10 21:04:05

回答

3

原來有一個在AppModel一些額外的代碼,被搞亂的東西了:

beforeFindafterFind

App::Import("Session"); 
$session = new CakeSession(); 
$sim_id = $session->read("Simulation.id"); 

我不知道爲什麼,但這是問題所在。刪除這些行解決了我遇到的問題。

61

你需要確保在每個PHP文件的頂部要啓動會議使用超全球的$_SESSION。像這樣:

<?php 
    session_start(); 
    echo $_SESSION['youritem']; 
?> 

你忘了會話HELPER。

檢查此鏈接:book.cakephp.org/2.0/en/core-libraries/helpers/session.html

+0

我在我的core.php文件中調用'Configure :: write('Session.start',true);''。蛋糕不應該從那裏照顧它嗎? – 2012-03-10 21:32:01

+1

是否嘗試過session_start();在第一行 – Ghostman 2012-03-10 21:39:46

+0

檢查我更新的答案中的鏈接 – Ghostman 2012-03-10 21:49:02