Undefined variable: $_SESSION

153,058

Solution 1

Turned out there was some extra code in the AppModel that was messing things up:

in beforeFind and afterFind:

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

I don't know why, but that was what the problem was. Removing those lines fixed the issue I was having.

Solution 2

You need make sure to start the session at the top of every PHP file where you want to use the $_SESSION superglobal. Like this:

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

You forgot the Session HELPER.

Check this link : book.cakephp.org/2.0/en/core-libraries/helpers/session.html

Solution 3

For anybody having this issue in CakePHP 4.x:

Argument 1 passed to Cake\Http\Session::_overwrite() must be of the type array, null given, called in /opt/lampp/htdocs/rondeel/vendor/cakephp/cakephp/src/Http/Session.php on line 513

I was testing my authentication form and used a debug statement to post the form data. Turns out that that results in headers being sent before the session is started, which causes the Cake\Http\Session::start() method to fail:

if (ini_get('session.use_cookies') && headers_sent()) {
    return false;
}

Solution: make sure not to echo or debug anything before the session is started.

Solution 4

Another possibility for this warning (and, most likely, problems with app behavior) is that the original author of the app relied on session.auto_start being on (defaults to off)

If you don't want to mess with the code and just need it to work, you can always change php configuration and restart php-fpm (if this is a web app):

/etc/php.d/my-new-file.ini :

session.auto_start = 1

(This is correct for CentOS 8, adjust for your OS/packaging)

Share:
153,058
Ian Hunter
Author by

Ian Hunter

Updated on April 05, 2021

Comments

  • Ian Hunter
    Ian Hunter about 3 years

    I'm getting E_NOTICE errors in a core CakePHP file when it tries to reference a never-set or unset session (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);
    }
    

    I've done a search through my code (in the app/ directory) and I can't find references to $_SESSION or session_destroy. Am I missing anything?

    This error shows up when I try to run any unit tests. Is this...normal? I've cleared out the cake/ directory and replaced it with another one (same version) just to make sure that I hadn't inadvertently modified anything in the core files, but I still get the same error. I'm not sure if this is just a flaw in the framework or something else.

    EDIT

    Here are the results of the test run on the command line:

    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