2

フェイルオーバーに使用できるサーバーが 2 つあります。データベースは、各サーバーがフルスタックのコピーを実行するように、マスター-マスターとして複製 (MySQL) されます。あるサーバーを使用しているときにセッション テーブルが更新され、リクエストを調べたところ、同じ PHPSESSID が送信されていることがわかります。しかし、URL を変更したり、セカンダリ マシンにフェールオーバーしたりすると、セッションが強制終了され、再ログインする必要があります。

セカンダリで同じ PHPSESSID 値が送信されますが、セッションは認識されません。Apache/PHP はセッションをその特定のボックスにリンクしていますか? もしそうなら、どうすればデータベースに既にあるセッションを認識させることができますか?

4

2 に答える 2

1

注:「編集」から回答に移動して、回答済みとしてマークします

実際に解決策を見つけました。「問題」は、PHP インストールを保護するための Suhosin パッチです。Suhosin は、アプリケーションの DocRoot だけでなく、暗号鍵に基づいてセッション データを暗号化するための構成可能なオプションをサポートします。フェイルオーバー サーバーには異なる DocRoot があったため、暗号化されたデータが読み取られる可能性はありませんでした。

suhosin.ini を編集して共有暗号鍵を追加し、DocRoot 暗号化オプションをオフにすると、セッションは期待どおりに共有されます。

解決方法: http://rommelsantor.com/clog/2011/02/06/php-shared-session-encoding-solution/

于 2011-05-02T19:52:40.340 に答える
0

使用している場合$_SESSION、それはそのサーバーに関連付けられています。Cookie を使用してセッション ID を追跡し、それを DB 内のセッションと照合する必要があります。

于 2011-04-28T21:36:02.847 に答える