9

複数のWebアプリケーションサーバーを実行していて、Server1からユーザーにログインしていると、彼のセッションが開始されます。httpはステートレスであるため、次のリクエストが、アプリケーションへのログインに使用されたSever1よりもServer3に送信される場合を想定します。私はCookie、隠しフォームを使用していますが、Server2では機能しません。

では、セッションを管理するにはどうすればよいですか?おそらくIDを生成して(または生成されたjsesioidを再利用して)中央データベースに保存し、すべてのサーバーがこのセッションIDにアクセスして、リクエストを処理する前に検証できるようにします。場合によっては、すべてのセッションデータをオブジェクトとしてデータベースに保存するメカニズムを開発する必要があります。

他に利用可能な組み込みのメカニズムはありますか?

4

3 に答える 3

10

アプリケーションを複数のサーバーにデプロイする場合は、「クラスタリング」を使用する必要があります。アプリケーションサーバーは、「セッションレプリケーション」を使用してこのシナリオを処理できます。セッションレプリケーションでは、各サーバーにアクティブユーザーセッションのコピーがあります。最初のリクエストがサーバーAに送信され、2番目のリクエストがサーバーBに送信される場合、アプリケーションコードとエンドユーザーに対して透過的になります。

Tomcatでのクラスタリング/セッションレプリケーションについては、このリンクを参照してください。

于 2012-10-15T08:19:12.417 に答える
2

Springはセッション管理を提供します:

Spring Sessionを使用すると、アプリケーションコンテナ固有のソリューションに縛られることなく、クラスター化されたセッションを簡単にサポートできます。また、以下との透過的な統合も提供します。

HttpSession-アプリケーションコンテナ(つまりTomcat)の中立的な方法でHttpSessionを置き換えることができ、RESTfulAPIで動作するヘッダーにセッションIDを提供するためのサポートがあります

WebSocket-WebSocketメッセージを受信するときにHttpSessionを存続させる機能を提供します

WebSession-Spring WebFluxのWebSessionをアプリケーションコンテナに依存しない方法で置き換えることができます。出典:Springdocs。

詳細については、こちらを確認してください:https ://spring.io/projects/spring-session#overview

于 2018-07-16T05:19:21.123 に答える
-1

インフラストラクチャ(サーバー1、2 ...)がCitrix Netscalarなどの単一のネットワークアプライアンスに接続されている場合は、IPまたはCookie Persistenceを使用して、netscalarが同じサーバーにさらにリクエストを送信できるようにすることができます。

于 2014-12-01T20:17:15.690 に答える