2009-02-27 3 views
230

JSESSIOINIDを作成したときの条件は/いつですか?JSESSIONIDはどのような条件で作成されますか?

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

答えて

267

JSESSIONIDのCookieは、セッションの作成時に作成または送信されます。セッションは、初めてコードrequest.getSession()またはrequest.getSession(true)を呼び出すと作成されます。セッションを取得したいが、セッションが存在しない場合は作成しない場合は、request.getSession(false)を使用してください。セッションまたはnullが返されます。この場合、新しいセッションは作成されず、JSESSIONID Cookieは送信されません。

セッションがある(これもセッションは、必ずしも最初の要求上で作成されていないことを意味します...あなたとあなたのコードでは、セッションが作成され制御である)ごとのコンテキスト:

SRV.7.3セッションスコープ

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

Servlet 2.4 specification

アップデート:まだセッションがない場合は、JSPページへのすべての呼び出しは、暗黙的に新しいセッションを作成します。これは、session='false'ページディレクティブでオフにすることができます。この場合、セッション変数はJSPページではまったく使用できません。ここで

+1

セッションはgetSessionへの明示的な呼び出しを伴わずに作成できませんか? 「コンテナによるコンテキスト間で決して共有してはいけません」に関して、websphereには、セッションの共有オプションがあります。質問の動機です。 – joshjdevl

+0

サーブレットAPIだけを使用しているのであれば。しかし、サーバー固有の拡張機能(Websphereのセッション共有など)があるかもしれません。 –

+0

タグにcookies属性が含まれていると、あなたのcontext.xmlファイルが自動セッション作成を制御できると思います。 < –

16

訂正:PeterŠtibranýの回答に投票してください - もっと正確で完全です!

「JSESSIONID」は、httpセッションの一意のIDです(see the javadoc here)。 javadocには次の文があります: "セッション情報は現在のWebアプリケーション(ServletContext)のみに適用されるため、あるコンテキストに格納されている情報は別のコンテキストに直接表示されません。

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

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

ご希望の質問にお答えします。

+1

セッションスコープの明確な説明。 – user3123690

+0

@リンクが壊れています – Tim

37

JSESSIONIDクッキーの1つの以上のソースに関するいくつかの情報は次のとおりです。

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

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

サーブレットからJSPを呼び出すと、好きかどうかにかかわらず、JSESSIONIDが作成されます。

を追加しました:

<%@ page session="false" %> 

あなたはJSPによってJSESSIONIDの設定を無効にすることができます。私は、次のJSPディレクティブを追加することによってことがわかりました。カスタムタグをJSPで生成されたリンクについては

+3

つまり、ページセッション属性のデフォルト値は "true"です。これはいくつかの(多くの場合)予期しないことがあります。 –

+0

私はtomcatにもいますが、jspをまったく使用しませんが、セッションcookieはとにかく作成されます。どのようにこの状況でそれを防ぐためにどのようなアイデア? – ClassyPimp

1

、私は場合はご用心Strutsアクションに

7

<%@ page session="false" %> 
JSPで

request.getSession().invalidate(); 

を使用していましたあなたのページには他の.jspまたは.jspf(フラグメント)が含まれています!あなたは同様にそれらの

<%@ page session="false" %> 

を設定しない場合は、親ページには、新しいセッションを開始し、JSESSIONIDクッキーを設定することになります。特に.jspfページの場合

あなたがそのようなスニペットを使用してweb.xmlファイルを構成した場合、この処理が行われます。その中のスクリプトレットを有効にするために

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

関連する問題