2

リソース消費量が少ないため、私はApacheからnginxに移行する過程にあります。LEMPスタックがインストールされたUbuntuサーバーボックスをセットアップしました。すべてのアプリケーション(3つのCakePHP 2.0.5アプリ、1つのWordpressインストール)を移動した後、ブラウザーを閉じると、CakeのCookieが突然消えるという1つのことを除いてすべてが完全に機能しているようです。

私は非常に単純なテストPHPページを作成して、Cookieがまったく機能しているかどうかをテストし、Cakeではなく実際に機能しているかどうかをテストしました。Wordpressは、ブラウザを閉じたときに私を思い出すのにも問題はありません。

Chrome開発者ツールを使用して、Cookieが設定されているかどうかを確認しました。これは、以下のとおりです。

設定されているCookie

賞味期限も1ヶ月先に設定されているので、なぜブラウザの近くに住んでいないのかわかりません。ブラウザを起動してアプリに移動するとすぐに、Cookieはなくなります。

クッキーがなくなった!

私が気づいたことの1つは、Apacheでアプリを実行しているCAKEPHP場合、上記のCookieは閉じる前後で同じ値になることです。ただし、nginxサーバーでは、ブラウザを閉じて再度開くたびに、そのCookieの値が異なります。

これはセッションに関係している可能性があると思ったので、セッション設定をチェックインcore.phpし、PHPにセッション処理を実行させるように設定しました。

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

ディレクトリを確認し、/tmpセッションファイルが作成されていることを確認しました。cakeCakeがセッションをそのディレクトリに保存するようにセッションハンドラを変更しようとしapp/tmp/sessionsましたが、セッションがこのディレクトリに正常に作成されても、ブラウザを閉じるとCookieが失われます。

誰かが以前にnginxとCakeの間でこの動作を経験したことがありますか、またはこれが発生する可能性がある理由について何か考えがありますか?

4

1 に答える 1

1

この問題は、暗号化されたCookieとSuhosinパッチに関連しています。どうやらSuhosinはあなたが行った呼び出しを無視しmt_srand()srand()ランダマイザー自体を初期化します[ここを参照]。Cakeはこれらの機能に依存しているため、暗号化されたCookieに干渉していました。これを修正するために、これらの2行をphp.iniファイルに追加し、サーバーを再起動しました(nginxを再起動するだけでは機能しないことに注意してください)。

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