如何在没有引号的情况下创建cookie?

时间:2013-01-29 11:56:43

标签: http servlets cookies quotes

我需要使用电子邮件地址创建cookie作为值 - 但是当我尝试 - 然后我有结果:

“someone@example.com”

但我希望:

someone@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);

感谢您的帮助。

1 个答案:

答案 0 :(得分:12)

确实是由@标志引起的。这是版本0 cookie中的not allowed。容器将隐式强制它成为版本1 cookie(在MSIE浏览器中中断)。您想{cookie}创建

时的URL-encode cookie值
Cookie cookie = new Cookie("login", URLEncoder.encode("someone@example.com", "UTF-8"));
cookie.setMaxAge(2592000);
cookie.setDomain("domain.com");
response.addCookie(cookie);
在cookie阅读中

URL-decode

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

请注意,您确定不应将Cookie版本明确设置为1。

另见:


对于具体问题,

无关,最终用户或中间人可以看到和操纵cookie。在cookie中携带电子邮件地址是一种难闻的气味。如果最终用户将其更改为其他地址怎么办?无论什么功能要求(记住登录?),您认为通过在cookie中携带电子邮件地址来解决,最有可能以不同的方式解决。

另见: