【问题标题】:CakePHP cookies not persisting after browser close浏览器关闭后 CakePHP cookie 不会持续存在
【发布时间】:2012-08-31 08:27:55
【问题描述】:

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

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

使用 Chrome 开发者工具,我检查了是否设置了 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 之间的这种行为,或者对为什么会发生这种情况有任何想法?

【问题讨论】:

    标签: php cakephp cookies nginx cakephp-2.0


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-10
      • 2011-08-05
      • 1970-01-01
      • 2019-10-20
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多