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

rob*_*son 4 cookies quotes servlets http

我需要用电子邮件地址创建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);
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Bal*_*usC 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);
Run Code Online (Sandbox Code Playgroud)

并在cookie读取时对其进行URL解码

String value = URLDecoder.decode(cookie.getValue(), "UTF-8");
Run Code Online (Sandbox Code Playgroud)

请注意,您应该确保不将cookie版本明确设置为1.

也可以看看:


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

也可以看看: