0

シンプルなjspログインページがあり、「remember me2」機能を実装しようとしています.jspのページコード:

 String username = "";
    Cookie[] vec = request.getCookies();
    for(int i=0; vec!=null && i<vec.length; i++)
    {
        if(vec[i].getName().equals("userNameCookie")&&!vec[i].getValue().equals(""))
        {
            username = vec[i].getValue();
        }   
    }

フォーム パラメーターはサーブレット コントローラーに送信され、コントローラーは Cookie を作成して応答に追加し、その後、コントローラーは要求を別のページに転送します。

私の問題は、ログイン ページに戻った後、コントローラーが応答に追加する Cookie が存在しないことです。実際、Cookie は、コントローラーが要求を転送したページに存在します。

コントローラーのコードは次のとおりです。

String username = request.getParameter("username");
            String password = request.getParameter("password");
            Cookie cookie = new Cookie("userNameCookie", username);
            cookie.setMaxAge(7 * 24 * 60 * 60);
            response.addCookie(cookie);
getServletConfig().getServletContext().getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);

私は何を間違っていますか?

ありがとう!

4

2 に答える 2

2

おそらく、Cookieのパスを指定する必要があります。IIRC、指定しない場合、Cookie は、Cookie の送信元の URL に対してのみ有効です。

また、remember-me cookie は本当に安全ではありません。どのユーザーも、他のユーザーの名前を含む Cookie を送信するだけで、他のユーザーとして自分自身を認証できます。Cookie をランダムで推測しにくいものにし、各ランダム Cookie をデータベース内で生成されたユーザーに関連付ける必要があります。

于 2013-01-06T15:16:01.380 に答える
0

ユーザーが初めてリクエストメッセージを送信したとき、サーブレットで作成したCookieは、jspのリクエストオブジェクトではなく、レスポンスオブジェクトに保存されています。サーブレットが転送するjspのリクエストオブジェクトからCookieを取得することはできません。Webコンテナは、クライアントエージェントに応答メッセージを送信する前に転送を処理するためです。クライアントは、応答メッセージを受信したときにCookieを保存するだけです。

クライアントがリクエストを再送すると、おそらくそれが行われます。

于 2013-01-06T15:31:55.117 に答える