2012-09-06 58 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 
相關問題