私は現在、JSFで「自動ログイン」メカニズムを実装しています。フィルタは、各リクエストをインターセプトし、ユーザがクッキーを読んでログインしているかどうかをチェックするように実装されています。CookieのmaxAgeは常に-1
すると、マネージドBeanに、クッキーはこのように保存され、ユーザが最初にログインする:
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
Cookie cookie = new Cookie("myCookieRef", value);
cookie.setPath("/");
cookie.setMaxAge(3600);
response.addCookie(cookie);
その後、ユーザがフィルタで、リダイレクトを実行する場合、私は取得するには、次のコードを使用しますクッキー:
Cookie[] cookies = request.getCookies();
if (cookies != null)
{
for (Cookie cookie : cookies)
{
if (name.equals("myCookieRef"))
{
return cookie;
}
}
}
リクエストはHttpServletRequestオブジェクトです。
問題が返されるクッキーが常に-1MAXAGEとヌル値を持っています。
クッキーを追加するときに何かが間に合わないかどうかわかりません。クッキーにいくつかの追加属性を指定する必要がありますか?
多くのありがとうございます。
お返事ありがとうございます。私は別の質問があります:私は最初に "私を覚えている"というチェックをしてサインインし、サインアウトする前にサインアウトしてからクッキーを取り出し、HttpServletResponseでmaxAgeを0に設定します。その後、私は再び「サインイン」をチェックせずにサインインします。今回はフィルタで、初めてのサインイン時に作成された同じクッキーを引き続き検索できますが、クッキーがまだ存在する理由はわかりません。 クッキー名に関しては、それは常に同じものであるべきですか?異なるユーザーがログインしても?ユーザーが「私を覚えています」をチェックせずにログインした場合、クッキーを作成する必要がありますか? – qiuzmjq
異なるパスに複数のCookieがあるようです。一般的なスターターの間違いは、Cookieパスが明示的に設定されていないため、URLに現在開かれているフォルダーがデフォルトであることです。明示的にクッキーパスを、このクッキーを使用可能にしたいすべてのフォルダーの共通の親に設定する必要があります。これがwebappのルートフォルダの場合は、 ''/''を設定します。 a.oを参照してください。 http://stackoverflow.com/a/28177426 – BalusC
パスを「/」に設定しました。最初のログアウトを確認しているHttpServletResponseでmaxAgeを0に設定していても、2回目のログイン時にフィルタ内にクッキーが存在するのは奇妙です。 – qiuzmjq