回答:
JSESSIONID Cookieは、セッションの作成時に作成/送信されます。セッションは、コードの呼び出し時request.getSession()
またはrequest.getSession(true)
初めて作成されます。セッションを取得するだけで、セッションが存在しない場合は作成しない場合は、使用してrequest.getSession(false)
くださいnull
。これにより、セッションまたはが返されます。この場合、新しいセッションは作成されず、JSESSIONID Cookieは送信されません。(これは、セッションが必ずしも最初のリクエストで作成されるとは限らないことを意味します... セッションが作成されると、あなたとあなたのコードが制御されます)
セッションはコンテキストごとです。
SRV.7.3セッションスコープ
HttpSessionオブジェクトのスコープは、アプリケーション(またはサーブレットコンテキスト)レベルである必要があります。セッションの確立に使用されるCookieなどの基本的なメカニズムは、異なるコンテキストで同じにすることができますが、参照されるオブジェクト(そのオブジェクトの属性を含む)は、コンテナー間でコンテキスト間で共有してはなりません。
更新:セッションがまだない場合、JSPページを呼び出すたびに暗黙的に新しいセッションが作成されます。これは、session='false'
pageディレクティブでオフにできます。その場合、JSPページではセッション変数を使用できません。
request.getSession()
またはを呼び出すだけの場合request.getSession(true)
、既存のセッションまたは新しいセッションのいずれかを取得します。ただし、コードがを呼び出すとrequest.getSession(false)
、既存のセッションが取得されるか、セッションが存在しない場合はnullが取得されます。
次に、JSESSIONID
Cookieのもう1つのソースに関する情報を示します。
Tomcatサーバーで実行されるいくつかのJavaコードをデバッグしていました。request.getSession()
コードのどこにも明示的に呼び出していませんでしたが、JSESSIONID
Cookieがまだ設定されていることに気付きました。
最後に、Tomcatの下の作業ディレクトリにある、JSPに対応する生成されたJavaコードを確認しました。
好むと好まざるとにかかわらず、サーブレットからJSPを呼び出すJSESSIONID
と、作成されるようです。
追加:次のJSPディレクティブを追加することで、そのことがわかりました。
<%@ page session="false" %>
JSESSIONID
JSPの設定を無効にすることができます。
修正:PeterŠtibranýの回答に投票してください-より正確で完全です!
「JSESSIONID」は、httpセッションの一意のIDです。javadocを参照してください。そこで、あなたは次の文を見つけるでしょう
セッション情報のスコープは現在のWebアプリケーション(ServletContext)のみであるため、あるコンテキストに格納された情報は別のコンテキストに直接表示されません。
したがって、最初にサイトにアクセスすると、新しいセッションが作成され、SevletContextにバインドされます。複数のアプリケーションをデプロイする場合、セッションは共有されません。
現在のセッションを無効にして、新しいセッションを作成することもできます。たとえば、httpからhttpsに切り替える場合(ログイン後)、新しいセッションを作成することをお勧めします。
これがあなたの質問に答えることを願っています。
ページに他の.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>
内部のスクリプトレットを有効にするため。
カスタムタグを使用してJSPで生成されたリンクの場合、私は使用する必要がありました
<%@ page session="false" %>
JSPで
そして
request.getSession().invalidate();
Strutsアクション