2

由于资源消耗较低,我正在从 Apache 转向 nginx。我已经设置了一个安装了 LEMP 堆栈的 Ubuntu 服务器框。在将我所有的应用程序转移过来(3 个 CakePHP 2.0.5 应用程序,1 个 Wordpress 安装)之后,一切似乎都运行良好,除了一件事 - 当浏览器关闭时,Cake 的 cookie 突然消失了。

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

使用 Chrome 开发人员工具,我检查了是否设置了 cookie,如下所示:

正在设置的 Cookie

到期日期甚至也设置在未来一个月,所以我不明白为什么他们不超过浏览器关闭。一旦我启动浏览器并导航到我的应用程序,cookie 现在就消失了:

曲奇不见了!

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

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

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

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

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

4

1 回答 1

1

该问题与加密 cookie 和 Suhosin 补丁有关。显然 Suhosin 会忽略任何mt_srand()srand()调用您并初始化随机化器本身 [参见此处]。因为 Cake 依赖于这些函数,所以它干扰了我的加密 cookie。为了修复它,我将这两行添加到我的 php.ini 文件中并重新启动服务器(请注意,简单地重新启动 nginx 不起作用):

suhosin.srand.ignore = Off
suhosin.mt_srand.ignore = Off
于 2012-09-06T15:28:00.390 回答