22

PHPは、そのセッション情報を、そのセッションを確立するサーバーのホストのファイルシステムに保存します。負荷が各ホスト間でインテリジェントに分散されないマルチホストPHP環境では、PHPセッション変数を各リクエストで使用することはできません(リクエストが同じホストに割り当てられている場合を除きます。ロードバランサーを制御できないと仮定します)。 。

「PHP負荷分散のヒッチハイカーガイド」と呼ばれるこのサイトは、PHPセッションハンドラーをオーバーライドし、セッション情報を共有データベースに保存することを提案しています。

あなたの謙虚な意見では、複数のPHPホスト環境でセッション情報を維持するための最良の方法は何ですか?

更新:素晴らしいフィードバックをありがとう。サンプルコードを探している人には、MySQL用のSessionManagerクラスを作成するための便利なチュートリアルが見つかりました。これを確認することをお勧めします。

4

4 に答える 4

15

データベース、またはデータベース + Memcache。一般的に言えば、セッションはあまり頻繁に書き込まれるべきではありません。セッション データが変更された場合にのみデータベースに書き込むデータベース ソリューションから始めます。Memcache は、パフォーマンスの強化として後で追加する必要があります。主キーのみを検索するため、db ソリューションは非常に高速です。データベースにテーブル ロック (myISAM) ではなく、行ロックがあることを確認してください。MemCache だけは悪い考えです... オーバーフローしたり、クラッシュしたり、再起動したりすると、ユーザーはログアウトされます。

于 2008-09-16T20:48:00.723 に答える
2

何をするにしても、サーバー自体に保存しないでください (1 つのサーバーしか使用していない場合や、1+1 のフェールオーバー シナリオであっても)。それは行き止まりにあなたを置きます。

データベースと Memcache をストレージ/検索に使用すると、Zend の手に負えなくなります (そして、Zend のある時点で問題が発生すると信じています)。UserID または SessionID で簡単にパーティション分割できるため、MySQL を使用しても非常にスケーラブルになります。

(編集:さらに、DB + Memcacheを使用しても、商業パーティーに縛られることはありません。PHPに縛られることもありません-将来的には幸せになるかもしれません)

于 2008-09-16T21:14:04.670 に答える
1

セッション データを共有データベースに保存することはできますが、遅くなる可能性があります。非常に大きなサイトの場合は、おそらくmemcacheの方が適しています。

于 2008-09-16T20:41:22.457 に答える
1

プロジェクトの予算によっては、運用マシン用の Zend Platform を検討することもできます。これには、他の多くの優れた機能に加えて、CDN のように機能する構成可能なセッション クラスタリングが含まれます。

于 2008-09-16T20:53:51.707 に答える