JavaサーブレットのHttpSessionは後でのみ作成されます
HttpSession s = request.getSession();
?
私のコードではそれを書きませんでしたが、 を使用するif (request.getSession(false) == null) ...
と機能しません。なんで?
JavaサーブレットのHttpSessionは後でのみ作成されます
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 の回答に加えて、JSP ページでセッションを作成しないように構成しない限り、JSP ページによって暗黙的にセッションを作成できることに注意してください<%@ page session = "false" %>
。
完成させるには:
request.getSession()
サーブレットでを呼び出さない限り、セッションは作成されません。request.getSession(false)
新しいセッションを作成せずに既存のセッションを取得するために使用します。session
-指定しない限り<%@ page session="false" %>
session.isNew()
新しく作成されたかどうかを確認するために使用できますブラウザからセッション Cookie を削除して、別のテストを行ってみてください。機能しない場合は、その呼び出しの前に他のコンポーネントが新しいセッションを作成しています。