由于资源消耗较低,我正在离开Apache而转而使用nginx。我已经安装了一个安装了LEMP堆栈的Ubuntu Server盒子。在移动了所有应用程序(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之间经历过这种行为,或者对于为什么会发生这种行为有任何想法?
答案 0 :(得分:1)
问题与加密的Cookie和Suhosin补丁有关。显然,Suhosin会忽略您所做的任何mt_srand()
和srand()
来电,并初始化随机数发生器本身[see here]。因为Cake依赖于这些功能,所以它干扰了我加密的cookie。为了修复它,我将这两行添加到我的php.ini文件并重新启动服务器(请注意,只是重新启动nginx不起作用):
suhosin.srand.ignore = Off
suhosin.mt_srand.ignore = Off