異なるポートを使用して、1台のサーバーで2つの異なるWebアプリを実行している状況があります。どちらもJavaのJettyサーブレットコンテナを実行しているため、どちらもJSESSIONIDという名前のCookieパラメータを使用してセッションIDを追跡します。これらの2つのWebアプリは、セッションIDをめぐって争っています。
- Firefoxタブを開き、WebApp1に移動します
- WebApp1のHTTP応答には、JSESSIONID=1のset-cookieヘッダーがあります
- Firefoxには、WebApp1へのすべてのHTTPリクエストにJSESSIONID=1のCookieヘッダーが含まれるようになりました。
- 2番目のFirefoxタブを開き、WebApp2に移動します
- WebApp2へのHTTP要求にも、JSESSIONID = 1のCookieヘッダーがありますが、doGetで呼び出す
req.getSession(false);
と、取得しnull
ます。そして、呼び出すreq.getSession(true)
と、新しいSessionオブジェクトが取得されますが、WebApp2からのHTTP応答には、JSESSIONID=20のset-cookieヘッダーがあります。 - これで、WebApp2には動作中のセッションがありますが、WebApp1のセッションはなくなりました。WebApp1にアクセスすると、新しいセッションが表示され、WebApp2のセッションが吹き飛ばされます。
- 永遠に続く
そのため、セッションは各Webアプリ間でスラッシングしています。req.getSession(false)
すでにJSESSIONIDCookieが定義されている場合は、が有効なセッションを返すようにしたいと思います。
1つのオプションは、基本的にHashMapとWEBAPP1SESSIONIDおよびWEBAPP2SESSIONIDと呼ばれるCookieを使用してSessionフレームワークを再実装することですが、それは残念であり、新しいSessionのものをActionServletや他のいくつかの場所にハックする必要があります。
これは他の人が遭遇した問題であるに違いありません。桟橋はHttpServletRequest.getSession(boolean)
ただのくだらないですか?