浏览器关闭后CakePHP cookie不会持久存在

时间:2012-09-06 13:40:39

标签: php cakephp cookies nginx cakephp-2.0

由于资源消耗较低,我正在离开Apache而转而使用nginx。我已经安装了一个安装了LEMP堆栈的Ubuntu Server盒子。在移动了所有应用程序(3个CakePHP 2.0.5应用程序,1个Wordpress安装)之后,一切似乎都完美无缺,除了一件事 - 当浏览器关闭时,Cake的cookie突然消失。

我已经创建了一个非常简单的测试PHP页面来测试cookie是否正常工作并且它们实际上正在工作,而不是在Cake中。当我关闭浏览器时,Wordpress也没有任何麻烦记住我。

使用Chrome开发者工具,我已经检查过是否正在设置Cookie,如下所示:

Cookies being set

有效期甚至在未来一个月内设定,所以我不明白为什么他们没有经过浏览器关闭。只要我启动浏览器并导航到我的应用程序,cookie就会消失:

Cookie is gone!

我注意到的一件事是,我的应用程序在Apache上运行,您在上面看到的CAKEPHP cookie在关闭之前和之后具有相同的值。但是在nginx服务器上,每次关闭并重新打开浏览器时,该cookie都会有不同的值。

我认为这可能与会话有关,所以我检查了core.php中的会话设置,并设置为让PHP进行会话处理:

Configure::write('Session', array(
    'defaults' => 'php'
));

我已经检查了我的/tmp目录,并且正在创建会话文件。我尝试将会话处理程序更改为cake,以便Cake将会话存储在其app/tmp/sessions目录中,并且在此目录中成功创建会话时,我的cookie在浏览器关闭时仍会丢失。

之前有没有人在nginx和Cake之间经历过这种行为,或者对于为什么会发生这种行为有任何想法?

1 个答案:

答案 0 :(得分:1)

问题与加密的Cookie和Suhosin补丁有关。显然,Suhosin会忽略您所做的任何mt_srand()srand()来电,并初始化随机数发生器本身[see here]。因为Cake依赖于这些功能,所以它干扰了我加密的cookie。为了修复它,我将这两行添加到我的php.ini文件并重新启动服务器(请注意,只是重新启动nginx不起作用):

suhosin.srand.ignore = Off
suhosin.mt_srand.ignore = Off