13

こんにちは私はいくつかのウェブサーバーからデータを取得する必要があります。まず、ユーザーとして自分のWebサイトにログインします。ログインに成功した後、さまざまなWebサーバーからデータを取得して表示する必要があります。1つのセッションを複数のサーバーと共有するにはどうすればよいですか。どうすればこれを達成できますか?

最初にログインすると、そのサーバーの一時フォルダーに保存されたセッションとセッションIDが作成されます。別のサーバーにアクセスしようとすると、ログイン時にすでに作成されている現在のセッションをどのように使用できますか。誰かが解決策を提案できますか?

4

5 に答える 5

14

別のセッションハンドラーを使用する必要があります。

あなたはできる:

  • 独自に構築する(を参照session_set_save_handler)または
  • memcachedなどの独自のセッションハンドラーを提供する拡張機能を使用する
于 2011-06-27T09:31:11.540 に答える
10

これらすべての答えを補完するものとして:

セッションをデータベースに保存する場合は、PHPでのセッションのガベージコレクションが実際にアクティブ化されていることを確認してください(Debianのようなディストリビューションではそうではなく、独自のcronでセッションをガベージすることを決定し、php.iniを変更して起動しないようにしましたgcなので、とを確認してくださいsession.gc_probabilitysession.gc_divisor。データベース内のセッションストレージの主な問題は、データベース内で多くの書き込みクエリと多くの競合するアクセスを意味することです。これは、MySQLのようなデータベースサーバーにストレスを与える優れた方法です。したがって、別のソリューションを使用するIMHOの方が優れています。これにより、読み取り/書き込みの比率がより良いWebデータベースの方法で維持されます。

また、ファイルストレージシステムを維持し、 NFSを使用してサーバー間でファイルディレクトリを共有することもできます。以外session.save_pathのものを使用するように設定を変更します/tmp。しかし、NFSは、定義上、ディスクを使用する最速の方法ではありません。高速アクセスにはmemcachedまたはmongodbをお勧めします。

サーバー間で共有する必要があるのが認証だけである場合は、実際のセッションストレージを共有する代わりに、認証資格情報を共有できます。SOのOpenIdシステムと同様に、これはSSOと呼ばれるものです。Webパーツには、OpenIdからCASまでのいくつかのソリューションがあります。、 その他。データがクライアント側(ajax、ESIゲート)でマージされる場合、サーバー側での共通セッションデータストレージは実際には必要ありません。これにより、影響を受ける5つのWebアプリケーションのうち3つが共有セッションで同時にデータを書き込むことを回避できます。他のセッション共有手法(データベース、NFS、さらにはmemcached)は、負荷分散ツールがサーバー間でシーケンシャルHTTPリクエストを送信できるため、主に複数のサーバー間でデータを共有するために使用されますが、実際にデータの並列収集を意味する場合は、実際にSSOを研究します。

于 2011-06-27T20:26:09.723 に答える
7

もう1つのオプションは、memcachedを使用してセッションを保存することです。

重要なことは、すべてのサーバーがアクセスできる共有リソース(SQLデータベース、memcached、NoSQLデータベースなど)が必要であるということです。次に、session_set_save_handlerを使用して共有リソースにアクセスします。

于 2011-06-27T09:30:14.800 に答える
5

サーバープール全体からアクセスできるデータベースにセッションを保存します。

于 2011-06-27T09:28:51.460 に答える
5

データベースに保存します-すべてのサーバーを同じデータベースに接続します。「データベース内のphpストアセッション」の最初の結果

于 2011-06-27T09:29:06.847 に答える