web-dev-qa-db-fra.com

Variable non définie: $ _SESSION

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
21
Ian Hunter

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.

3
Ian Hunter

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

71
Ghostman