4

電子メールアドレスを値として使用してCookieを作成する必要があります-しかし、しようとすると、結果が得られます:

"someone@example.com"

しかし、私は持っていたい:

someone@example.com

Cookie は二重引用符なしで作成する必要があります。これは、他のアプリケーションがそのような形式で使用するためです。Javaに二重引用符を追加しないように強制する方法は? 特別な文字「at」があるため、Javaはそれらを追加します。

私はそのようにクッキーを作成します:

    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    Cookie cookie = new Cookie("login", "someone@example.com");
    cookie.setMaxAge(2592000);
    cookie.setDomain("domain.com");
    cookie.setVersion(1);
    response.addCookie(cookie);

助けてくれてありがとう。

4

1 に答える 1

12

@それは確かにサインによって引き起こされます。これは、バージョン 0 の Cookieでは許可されていません。コンテナーは暗黙的にバージョン 1 の Cookie になるように強制します (これは MSIE ブラウザーでは機能しません)。Cookie の作成時に Cookie の値をURL エンコードしたい

Cookie cookie = new Cookie("login", URLEncoder.encode("someone@example.com", "UTF-8"));
cookie.setMaxAge(2592000);
cookie.setDomain("domain.com");
response.addCookie(cookie);

Cookie読み取り時にURLデコードします

String value = URLDecoder.decode(cookie.getValue(), "UTF-8");

Cookie のバージョンを明示的に 1 に設定しないでください。

以下も参照してください。


具体的な問題とは関係ありませんが、Cookie はエンドユーザーまたは中間者によって表示および操作可能です。クッキーでメールアドレスを持ち歩くのは悪臭です. エンドユーザーが別のアドレスに変更した場合はどうなりますか? 機能要件 (ログインを覚えていますか?) が何であれ、Cookie で電子メール アドレスを保持することで解決しようと考えていたものは、おそらく別の方法で解決する必要があります。

以下も参照してください。

于 2013-01-29T11:59:49.337 に答える