0

我有一个刚刚从 1.1 升级的 CakePHP 1.2 版本。不幸的是,会话无法正常工作。

我在 stackoverflow 上的其他线程上花费了数小时,尝试了提供的解决方案,但到目前为止,没有任何效果。

当用户在以下位置登录时:accounts/login,我在 accounts_controller.php 中像这样设置会话。

$this->Session->write('Account', $someone['Account']);

print_r($this->Session->read());

$this->redirect("/accounts/profile");
exit;

会话肯定会被保存,因为读取显示了所有正确的会话信息。然而,一旦它重定向到 /profile,一切都消失了。

   function profile() {
     print_r($this->Session->Read());

这个的输出是:

Array ( [Config] => Array ( [userAgent] => [time] => 1376738563 [timeout] => 10 ) )

我已将蛋糕的安全级别设置为内核低,但仍然无法正常工作。

Configure::write('Security.level', 'low');

我的问题与这个问题基本相同: Cakephp session is destroy 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 上的设置上。

4

1 回答 1

2

好的,让我也将其发布为稍微改写的答案。

如图所示,此类问题通常与 cookie 有关,因此首先应该检查 cookie 是否真的被接收、设置和发送回服务器。

大多数浏览器都可以开箱即用地检查 cookie 是否被设置,在 Firefox 中,它们可以在页面信息对话框(页面信息 > 安全 > 隐私和历史 > 查看 Cookie)中找到,在 Chrome 中它们隐藏在高级内容设置(设置 > 显示高级设置 > 隐私 > 内容设置 > 所有 Cookie 和站点数据),在 IE 中,它们可通过开发人员工具(缓存 > 查看 Cookie 信息)获得。

可以使用大多数浏览器的开发人员工具检查是否接收和发送 cookie,在 Firefox 中,可以在控制台和网络选项卡(Firefox 按钮或工具 > Web 开发人员 > Web 控制台 > 控制台/网络)中进行检查,在 Chrome 中,它可以在网络选项卡(F12 > Network)中找到,就像在 IE 中(F12 > Network > Cookies)一样。

未发送的 Cookie(我们认为是您的问题)很可能是由错误的域和/或路径值、仅为安全连接定义的 cookie 或 cookie 可能只是过期造成的。可以使用 来检查 PHP 会话 cookie 设置是否配置正确session_get_cookie_params(),这将显示最有可能发现问题的 、 、 和lifetime设置pathdomain值。securehttponly

当然,也可能是浏览器设置、扩展程序等导致问题,因此最好使用新的默认浏览器配置文件进行测试(以防浏览器支持)。

于 2013-08-17T19:51:15.243 回答