2012-03-10 4 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); 
} 

Я сделал поиск через мой код (в каталоге app /), и я не могу найти ссылки на $_SESSION или session_destroy. Я что-то пропустил?

Эта ошибка появляется, когда я пытаюсь выполнить любые модульные тесты. Это нормально? Я очистил каталог cake/ и заменил его на другую (ту же версию), чтобы убедиться, что я не случайно не модифицировал что-либо в основных файлах, но все равно получаю ту же ошибку. Я не уверен, что это всего лишь недостаток в рамках или что-то еще.

EDIT

Вот результаты теста в командной строке:

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

+0

Я не знаком с Cake, но вы можете просто поставить session_start() в верхней части файла (или где-нибудь перед ошибкой). –

+0

Вы запускаете модульный тест в командной строке? Каково точное сообщение об ошибке? –

ответ

3

Оказалось, там был какой-то дополнительный код в AppModel, который был Мессинг вещи:

в beforeFind и afterFind:

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

Я вызываю 'Configure :: write ('Session.start', true);' в моем файле core.php. Не должен ли Торт позаботиться об этом оттуда? –

+1

сделал попытку session_start(); в первой строке – Ghostman

+0

проверить ссылку в обновленном ответе – Ghostman

Смежные вопросы