Je suis en train E_NOTICE
des erreurs dans un fichier CakePHP de base lorsqu'il essaie de référencer une session jamais définie ou non définie (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);
}
J'ai effectué une recherche dans mon code (dans le répertoire app /) et je ne trouve pas de références à $_SESSION
ou session_destroy
. Suis-je en train de manquer quelque chose?
Cette erreur apparaît lorsque j'essaie d'exécuter des tests unitaires. Est-ce normal? J'ai effacé le cake/
et l'ai remplacé par un autre (même version) juste pour m'assurer que je n'avais rien modifié par inadvertance dans les fichiers core, mais j'obtiens toujours la même erreur. Je ne sais pas si c'est juste une faille dans le cadre ou autre chose.
MODIFIER
Voici les résultats du test exécuté sur la ligne de commande:
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
Il s'est avéré qu'il y avait du code supplémentaire dans l'AppModel qui gâchait les choses:
dans beforeFind
et afterFind
:
App::Import("Session");
$session = new CakeSession();
$sim_id = $session->read("Simulation.id");
Je ne sais pas pourquoi, mais c'était le problème. La suppression de ces lignes a résolu le problème que j'avais.
Vous devez vous assurer de démarrer la session en haut de chaque fichier PHP où vous souhaitez utiliser le $_SESSION
superglobale. Comme ça:
<?php
session_start();
echo $_SESSION['youritem'];
?>
Vous avez oublié la session HELPER.
Vérifiez ce lien: book.cakephp.org/2.0/en/core-libraries/helpers/session.html