Reputation: 9774
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
Upvotes: 34
Views: 182104
Reputation: 995
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.
Upvotes: 1
Reputation: 1631
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)
Upvotes: 2
Reputation: 6114
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
Upvotes: 107
Reputation: 9774
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.
Upvotes: 3