6

私はJavaサーブレットを開発しています。ユーザーがログインしているかどうかを確認する時点で、HTTP 要求に有効なセッションがあるかどうかを確認したいと考えています。それを確認するには、2 つの可能性があります。

(1)

protected void processRequest(HttpServletRequest request, 
        HttpServletResponse response) throws ServletException, IOException {

    HttpSession session = request.getSession(false);
    if (session != null) {
        // user is logged in
        ...
    }
}

引数として false を渡すため、有効なセッションが既に存在しない場合、新しいセッションは作成されず、関数は確認できるように null を返します。

または私は:

(2)

    if (request.isRequestedSessionIdValid()) {
        // user is logged in
        ...
    }

違い、利点/欠点はありますか? それとも、両方の関数が多かれ少なかれ同じことをしますか?

4

2 に答える 2

10

フォーム Javadoc

isRequestedSessionIdValid boolean isRequestedSessionIdValid() 要求されたセッション ID がまだ有効かどうかを確認します。クライアントがセッション ID を指定しなかった場合、このメソッドは false を返します。

戻り値: このリクエストが現在のセッション コンテキストで有効なセッションの ID を持っている場合は true 。それ以外の場合は false

つまり、どちらも同じ意味です。ただし、request.getSession(false) はコンテナへの最初のリクエストの場合にのみ null になることに注意する必要があります。最初のリクエスト コンテナがセッションを作成した後、Jsessionid Cookie を response とともに送信して、同じブラウザからの後続のリクエストを追跡できるようにします。したがって、セッションがnullかどうかを確認する代わりに、セッション属性「is_logged_in」= trueを保存し、セッションがnullでない場合はこの属性も確認する必要があります。

于 2013-01-09T18:06:40.720 に答える
1

JavaDoc の文言に基づいて、区別があるように思われます: 有効なセッションが (前の への呼び出しから) 既に作成されている場合request.getSession(true)、要求されたセッション ID は有効ではありませんがrequest.getSession(false)、有効な (非-null) 戻るセッション。私はこの理論をテストしていません。

于 2013-09-25T20:08:54.013 に答える