サーブレットAがユーザーを次のようなセッションにバインドするとします。
HttpSession session = req.getSession(true);
そして、その同じユーザーは、 servltAの同じアプリケーションに属するサーブレットBでリクエストを実行した直後です。
この時点でサーブレットBが実行されると:
HttpSession session = req.getSession(false);
セッションはnullですか?
このコードがnullを返す理由として考えられるものは次のとおりです。
true
必要に応じて、このリクエストの新しいセッションを作成します。現在のセッションがない場合にfalse
nullを返す
2番目のサーブレットのリクエストでセッションIDを受け取っていることを確認する必要があります。あなたはそれを使ってそれをすることができますgetRequestedSessionId
session id
これは、2つの呼び出しの間、またはブラウザが呼び出しを行う前にセッションが無効になった場合にのみ発生する可能性があります。SeveletB
実際には、サーブレットの順序によって異なります。
一般に、セッションの自動作成を避けたい場合は、セッションを作成するコードの前に、セッションを使用するコードが実行されないようにする必要があります。
したがって、セッションがnullの場合は、ユーザーをサーブレットBからサーブレットAにリダイレクトすることをお勧めします。
あなたが述べたように、servletA
最初とservletB
次と呼ばれます。
あなたが言及したように何も起こらない場合、で使用/作成されたのと同じセッション( null ではない)を受け取ります。servletB
servletA
サーブレットAでは、
getSession(true) in servletA means create and return the session if not
present otherwise return the existing session
サーブレットBでは、
getSession(false) in servletB means return the existing session if present
otherwise return null.
確かにセッションは既に作成されているため、セッションの有効期限が切れるなど、セッションを消去するための 2 つの呼び出しの間に何も起こらなければ、 null でないセッションservletA
を受け取ります。servletB