我有一个CakePHP 1.2版本,我刚从1.1升级。不幸的是,会话无法正常工作。
我花了好几个小时在stackoverflow上的其他线程上,尝试过提供的解决方案,到目前为止,没有任何工作。
当用户登录时:accounts / login, 我像这样在accounts_controller.php中设置会话。
$this->Session->write('Account', $someone['Account']);
print_r($this->Session->read());
$this->redirect("/accounts/profile");
exit;
会话肯定会被保存,因为read会显示所有正确的会话信息。 然而,一旦它重定向到/ profile,一切都消失了。
function profile() {
print_r($this->Session->Read());
这个输出是:
Array ( [Config] => Array ( [userAgent] => [time] => 1376738563 [timeout] => 10 ) )
我已经将蛋糕安全级别设置为核心低,但它仍然不起作用。
Configure::write('Security.level', 'low');
我的问题基本上与这个问题相同: Cakephp session is destroyed after redirect
但我知道我的会话正在保存(我打开了硬盘上的会话文件进行验证)。而且没有其他解决方案可以解决这个问题。
我也发现这个帖子非常有帮助,但那里给出的解决方案对我来说也没有用: cakephp lost session variable when redirect
我对php.ini设置不是很熟练。有可能我错过了一些非常简单的东西,但我要拔掉我的头发。你能告诉我一些我可能遗失的信息吗?
我很乐意发布我的php.ini文件和core.php蛋糕文件,如果有人会觉得有用。
以下是相关的核心设置:
Configure::write('Session.save', 'cake'); //I have tried 'php' also
Configure::write('Session.cookie', 'CAKEPHP');
Configure::write('Session.timeout', '120');
Configure::write('Session.start', true);
Configure::write('Session.checkAgent', false);
Configure::write('Security.level', 'low');
我在阅读完这篇帖子后添加了以下内容:cakephp lost session variable when redirect 它之前或之后都没有用。 :)
Configure::write('Security.cookie', 'cakephpfdebackend');
Configure::write('Session.cookieTimeout', 10000);
Configure::write('Session.cookie_secure',false);
Configure::write('Session.referer_check' ,false);
Configure::write('Session.defaults', 'php');
我的浏览器启用了Cookie,我尝试过firefox和chrome。我现在正在使用localhost,所以我可以完全访问所有文件。 请问任何必要的问题 - 我很绝望。
编辑:我能够将我的网站推送到一个实时服务器,在那里我知道该服务器上其他网站的所有功能。我的网站在该服务器上正常工作。这将验证问题是否与我的计算机/ apache / php上的设置有关。答案 0 :(得分:2)
好的,让我发布一个稍微改写过的答案。
如图所示,这些问题通常与cookie有关,因此首先应该检查cookie是否实际被接收,设置并发送回服务器。
检查是否可以使用大多数浏览器开箱即可设置Cookie,在Firefox中可以在“页面信息”对话框中找到它们( 页面信息>安全>隐私&历史记录>查看Cookie ),在Chrome中,它们隐藏在高级内容设置中( 设置>显示高级设置>隐私>内容设置>所有Cookie和网站数据 ),在IE中,它们可通过开发人员工具获取( 缓存>查看Cookie信息 )。
检查是否收到和发送cookie可以使用大多数浏览器的开发人员工具完成,在Firefox中可以在控制台和网络选项卡中进行检查( Firefox按钮或工具> Web开发人员> Web控制台>控制台/网络 ),在Chrome中可以在网络标签中找到( F12>网络 ) ,就像在IE中一样( F12>网络> Cookies )。
我们认为未发送的Cookie是您的问题,很可能是由错误的域和/或路径值引起的,Cookie仅为安全连接定义,或者Cookie可能只是过期。检查是否正确配置了PHP会话cookie设置可以使用session_get_cookie_params()
,这将显示lifetime
,path
,domain
,secure
的值和httponly
设置,最有可能找到问题。
当然也可能存在导致问题的浏览器设置,扩展等,因此使用新的默认浏览器配置文件进行测试总是好的(如果浏览器支持该配置文件)。