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