2012-09-06 57 views
2

由于资源消耗较低,我正在从Apache转而支持nginx。我已经安装了安装了LEMP堆栈的Ubuntu Server框。将所有的应用程序移动完毕(3个CakePHP 2.0.5应用程序,1个Wordpress安装)之后,除了一件事外,一切似乎都很完美 - 当浏览器关闭时,Cake的Cookie突然消失。CakePHP cookies在浏览器关闭后不会持久

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

使用Chrome开发人员工具,我已经检查,看是否该cookie将被设定在所有的,这是你可以看到如下:

Cookies being set

有效期限甚至成立一个月进入未来,所以我不明白他们为什么不活过浏览器关闭。只要我火我的浏览器并导航到我的应用程序,该cookie现在已经不复存在了:

Cookie is gone!

有一件事我注意到的是,与在Apache上运行我的应用程序中,CAKEPHP饼干以上你看到的上面在收盘前后具有相同的价值。但是在nginx服务器上,每次关闭并重新打开浏览器时,该cookie都有不同的值。

我认为这可能与会话做的,所以我在core.php检查我的会话设置,它的设置,让PHP做会话处理:

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

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

以前有人在nginx和Cake之间经历过这种行为,或者对此有何看法?

回答

1

问题与加密的cookie和Suhosin补丁有关。显然Suhosin忽略任何你调用的mt_srand()srand()调用并初始化随机发生器本身[see here]。由于Cake依赖于这些功能,它会干扰我的加密cookie。为了解决这个问题,我将这两行添加到了我的php.ini文件中,并重新启动了服务器(注意,只需重新启动nginx就不起作用):

suhosin.srand.ignore = Off 
suhosin.mt_srand.ignore = Off 
相关问题