4

我需要以电子邮件地址为值创建 cookie - 但是当我尝试时 - 然后我得到了结果:

“某人@example.com”

但我想拥有:

某人@example.com

创建 cookie 时应不带双引号 - 因为其他应用程序以这种格式使用它。如何强制java不添加双引号?Java 添加它们是因为有特殊的字符“at”。

我以这种方式创建cookie:

    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 中携带电子邮件地址是一种难闻的气味。如果最终用户将其更改为不同的地址怎么办?无论您想通过在 cookie 中携带电子邮件地址来解决什么功能要求(记住登录名?),都应该以不同的方式解决。

也可以看看:

于 2013-01-29T11:59:49.337 回答