HttpSessionはJavaサーブレットは、後にのみ作成されます
_HttpSession s = request.getSession();
_
?
私のコードではそれを書いていませんが、if (request.getSession(false) == null) ...
を使用すると、機能しません。どうして?
Request.getSession()を呼び出すと、HttpSessionが作成されます。
ただしデフォルトでJSPにアクセスすると、セッションが自動的に作成されます。この動作は、次を使用して無効にできます。<%@ page session="false">
JSPを使用していますか?
JavaDocsを読んでください、それははっきりと言います:
これは、 request.getSession()
このリクエストに関連付けられている現在のセッションを返します。リクエストにセッションがない場合は、セッションを作成します。
そして他の変種 request.getSession(isCreate)
このリクエストに関連付けられている現在のHttpSessionを返します。現在のセッションがなく、createがtrueの場合は、新しいセッションを返します。
createがfalseで、リクエストに有効なHttpSessionがない場合、このメソッドはnullを返します。
セッションが適切に維持されていることを確認するには、応答がコミットされる前にこのメソッドを呼び出す必要があります。コンテナがセッションの整合性を維持するためにCookieを使用していて、応答がコミットされたときに新しいセッションを作成するように求められた場合、IllegalStateExceptionがスローされます。
更新
少し調べてみると、request.getSession()
がどこかと呼ばれない限り、セッションは作成されないことがわかりました。以来、_The servlet container uses this interface to create a session between an HTTP client and an HTTP server.
_サーブレットコンテナがデフォルトでセッションを作成する可能性が高いです。
参照:
ただし、安全のために、request.getSession()
を使用してセッションを取得し、セッションが既に作成されているかどうかを確認する必要がある場合にのみrequest.getSession(false)
を使用してください。
Nishantの回答に加えて、<%@ page session = "false" %>
でセッションを作成しないように構成しない限り、JSPページによってセッションを暗黙的に作成できることに注意してください。
それを完了するには:
request.getSession()
を呼び出さない限り、セッションは作成されません。request.getSession(false)
を使用して、新しいセッションを作成せずに既存のセッションを取得します。<%@ page session="false" %>
_を指定しない限り、セッションは自動的に作成されます-変数session
-session.isNew()
を使用して、セッションが新しく作成されたかどうかを確認できます。ブラウザからセッションCookieを削除して、別のテストを行ってみてください。それが機能しない場合は、他のコンポーネントがその呼び出しの前に新しいセッションを作成しています。