Ian*_*ter 22 php session cakephp e-notices
当我E_NOTICE尝试引用一个永不设置或未设置的session(cake/libs/cake_session.php line 372)时,我在核心CakePHP文件中遇到错误:
function read($name = null) {
if (is_null($name)) {
return $this->__returnSessionVars();
}
if (empty($name)) {
return false;
}
$result = Set::classicExtract($_SESSION, $name);
}
Run Code Online (Sandbox Code Playgroud)
我已经完成了对我的代码(在app /目录中)的搜索,但我找不到对$_SESSIONor的引用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
Run Code Online (Sandbox Code Playgroud)
Gho*_*man 74
您需要确保在要使用$_SESSION超全局的每个PHP文件的顶部启动会话.像这样:
<?php
session_start();
echo $_SESSION['youritem'];
?>
Run Code Online (Sandbox Code Playgroud)
你忘记了Session HELPER.
请访问此链接:book.cakephp.org/2.0/en/core-libraries/helpers/session.html
结果 AppModel 中有一些额外的代码把事情弄乱了:
在beforeFind和afterFind:
App::Import("Session");
$session = new CakeSession();
$sim_id = $session->read("Simulation.id");
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但这就是问题所在。删除这些行解决了我遇到的问题。