Неопределенная переменная: $ _SESSION - PullRequest
21 голосов
/ 11 марта 2012

Я получаю 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/ и заменил его другим (той же версии), просто чтобы убедиться, что я случайно не изменил что-либо в файлах ядра, но я все еще получаю ту же ошибку.Я не уверен, является ли это просто недостатком фреймворка или чем-то еще.

РЕДАКТИРОВАТЬ

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

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

Ответы [ 2 ]

69 голосов
/ 11 марта 2012

Вам нужно обязательно начинать сеанс вверху каждого PHP-файла, где вы хотите использовать суперглобальный $_SESSION.Например:

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

Вы забыли HELPER Session.

Проверьте эту ссылку: book.cakephp.org / 2.0 / en / core-library / helpers / session.html

3 голосов
/ 11 марта 2012

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

в beforeFind и afterFind:

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

Я не знаю почему , но в этом-то и была проблема. Удаление этих строк устранило проблему, с которой я столкнулся.

...