2

Web アプリに「Remember me」機能を実装しました。これは、RSA を使用して暗号化されたユーザー名/パスワードを含む Cookie を使用して行いました。

ログイン時に Cookie を追加します。その後、(ブラウザーを閉じずに) ログアウトすると、Cookie は正常に読み取られ、ログイン ページにユーザー名/パスが既に入力されていることが表示されます。しかし、ブラウザを閉じると; または、タブを閉じてアプリケーションを再度実行します。Cookie が読み取られると、読み取られる Cookie は JSESSIONID だけです。資格情報を含む Cookie は ((HttpServletRequest)facesContext.getExternalContext().getRequest()).getCookies(­); 、ブラウザで確認できますが、返される配列には含まれていません。何故ですか?

これは、Cookie を作成するコードです。

String credentials = username + "?" + password;
Cookie c = CookieHandler.getInstance().createCookie("vtcred", credentials, rememberMe);
FacesContext facesContext = FacesContext.getCurrentInstance();
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(c);

メソッド createCookie:

public Cookie createCookie(String name, String value, boolean rememberMe) {
        value = encript(value);
        Cookie credCookie = new Cookie(name, value);
        credCookie.setHttpOnly(true);
        if(rememberMe) {
            credCookie.setMaxAge(86400);
        }
        else {
            credCookie.setMaxAge(0);
        }
        return credCookie;
    }

編集: Cookie の最大有効期間を 1 日に設定しています。ブラウザで、Cookie の有効期限が明日切れることを確認できるので、それは問題ではありません

前もってありがとう、ダミアン

edit2: これは非常に奇妙ですが、現在は機能しているようです。私はそれをテストし続け、通知します。ありがとう。

4

2 に答える 2

3

Cookie が読み取られないことがある理由がわかりました。パス属性に関係しています。

誰かがこの問題を抱えている場合は、次のように Cookie のパスを設定します。

Cookie c = new Cookie("name", "value");
cookie.setMaxAge(86400);
cookie.setPath("/");

よろしく

于 2011-07-18T12:06:44.890 に答える
0

Cookie に有効期限を設定することもできます。そうしないと、ブラウザセッションの間だけ持続します。

于 2011-05-02T19:54:47.830 に答える