web-dev-qa-db-ja.com

JSESSIONIDはのような条件で作成されますか?

JSESSIONIDが作成されたときの条件はいつ、どのようなものですか?

ドメインごとですか。たとえば、Tomcatアプリケーションサーバーを使用していて、複数のWebアプリケーションをデプロイする場合、コンテキスト(Webアプリケーション)ごとに異なるJSESSIONIDが作成されるのでしょうか。それとも、同じドメインであればWebアプリケーション間で共有されるのですか。

253
joshjdevl

セッションの作成時にJSESSIONID Cookieが作成または送信されます。コードが初めてrequest.getSession()またはrequest.getSession(true)を呼び出したときにセッションが作成されます。セッションを取得したいが、それが存在しない場合は作成したくない場合は、request.getSession(false)を使用します - これにより、セッションまたはnullが返されます。この場合、新しいセッションは作成されず、JSESSIONID Cookieは送信されません。 (これはまた、セッションが最初のリクエストで必ずしも作成されないことを意味します...あなたとあなたのコードは制御下にありますwhenセッションが作成されます)

セッションはコンテキストごとです。

SRV.7.3セッション範囲

HttpSessionオブジェクトは、アプリケーション(またはサーブレットコンテキスト)レベルでスコープを設定する必要があります。セッションを確立するために使用されるcookieなどの基本的なメカニズムは、異なるコンテキストでも同じですが、そのオブジェクト内の属性を含む参照されるオブジェクトは、コンテナーによってコンテキスト間で決して共有されてはいけません。

サーブレット2.4仕様

更新:まだセッションがない場合は、JSPページを呼び出すたびに暗黙的に新しいセッションが作成されます。これは、session='false' pageディレクティブで無効にできます。この場合、セッション変数はJSPページではまったく使用できません。

297

JSESSIONIDクッキーのもう1つの情報源についての情報は以下のとおりです。

Tomcatサーバー上で動作するJavaコードをデバッグしているだけです。私は自分のコードのどこにも明示的にrequest.getSession()を呼び出していませんでしたが、JSESSIONID cookieがまだ設定されていることに気付きました。

Tomcatの下の作業ディレクトリーにあるJSPに対応する生成されたJavaコードを、最後に調べました。

好きであろうとなかろうと、サーブレットからJSPを呼び出すと、JSESSIONIDが作成されるようです。

追加:以下のJSPディレクティブを追加することでわかりました。

<%@ page session="false" %>

jSPによってJSESSIONIDの設定を無効にすることができます。

44

訂正:PeterŠtibranýの答えに投票してください - それはより正確かつ完全です!

"JSESSIONID"はhttpセッションの一意のIDです - ここのjavadocを参照してください 。そこに、あなたは次の文を見つけるでしょう

セッション情報は現在のWebアプリケーション(ServletContext)のみを対象としているため、あるコンテキストに格納された情報は別のコンテキストに直接表示されません。

そのため、最初にサイトにアクセスしたときに、新しいセッションが作成されてSevletContextにバインドされます。複数のアプリケーションをデプロイした場合、セッションは共有されません。

現在のセッションを無効にして新しいセッションを作成することもできます。例えば(ログイン後に)httpからhttpsに切り替えるとき、新しいセッションを作成することは非常に良い考えです。

あなたの質問に答えてください。

20
Mo.

あなたのページに他の.jspまたは.jspf(フラグメント)が含まれている場合は注意してください。設定していない場合

<%@ page session="false" %>

それらについても、親ページは新しいセッションを開始してJSESSIONID Cookieを設定することになります。

特に.jspfページの場合は、web.xmlに次のようなコードを設定したとします。

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jspf</url-pattern>
    </jsp-property-group>
</jsp-config>

それらの中のスクリプトレットを有効にするために。

7
polaretto

カスタムタグを使用してJSPで生成されたリンクには、私が使用しなければなりませんでした

<%@ page session="false" %>

jSP内

そして

request.getSession().invalidate();

strutsアクションで

1
Jerome Jaglale