我是靠谱客的博主 标致草莓,最近开发中收集的这篇文章主要介绍Cookie中特殊字符的坑,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

服务端代码

Cookie[] cookies = request.getCookies();
LOGGER.info("historyOrder.cookies=" + JsonUtils.toJson(cookies));
Cookie userIdCookie = CookieUtil.getCookieByName(request, "userId");
if (null == userIdCookie || StringUtils.isBlank(userIdCookie.getValue())) {
    responseDto.setErrno(11);
    responseDto.setErrmsg("请求参数异常![0002]");
    return responseDto;
}
String cookieUserId = userIdCookie.getValue();
LOGGER.info("historyOrder.cookies.userId=" + cookieUserId);

//附CookieUtil.getCookieByNamey方法
public static Cookie getCookieByName(HttpServletRequest request, String name) {
    Map<String, Cookie> cookieMap = readCookieMap(request);
    if (cookieMap.containsKey(name)) {
        Cookie cookie = (Cookie) cookieMap.get(name);
        return cookie;
    } else {
        return null;
    }
}

public static Map<String, Cookie> readCookieMap(HttpServletRequest request) {
    Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
    Cookie[] cookies = request.getCookies();
    if (null != cookies) {
        for (Cookie cookie : cookies) {
            cookieMap.put(cookie.getName(), cookie);
        }
    }
    return cookieMap;
}
测试代码:
document.cookie="userId=liuzhichong;path=/;Max-Age=360000000"
测试结果
historyOrder.cookies.userId=liuzhichong

=====================================================
下面这2个测试是有问题的哟

测试代码:
document.cookie="userId=liuzhichong@;path=/;Max-Age=360000000"
测试结果
historyOrder.cookies.userId=liuzhichong

测试代码:
document.cookie="userId=liuzhi@chong@;path=/;Max-Age=360000000"
测试结果
historyOrder.cookies.userId=liuzhi

参考文章:http://www.blogjava.net/stone2083/archive/2010/11/03/336923.html

我们在实际使用Cookie过程中要注意一些问题:

  1. Cookie的兼容性问题

  Cookie的格式有2个不同的版本,第一个版本,我们称为Cookie Version 0,是最初由Netscape公司制定的,也被几乎所有的浏览器支持。而较新的版本,Cookie Version 1,则是根据RFC 2109文档制定的。为了确保兼容性,JAVA规定,前面所提到的涉及Cookie的操作都是针对旧版本的Cookie进行的。而新版本的Cookie目前还不被Javax.servlet.http.Cookie包所支持。

  2. Cookie的内容

  同样的Cookie的内容的字符限制针对不同的Cookie版本也有不同。在Cookie Version 0中,某些特殊的字符,例如:空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号,冒号,分号都不能作为Cookie的内容。这也就是为什么我们在例子中设定Cookie的内容为“Test_Content”的原因。

  虽然在Cookie Version 1规定中放宽了限制,可以使用这些字符,但是考虑到新版本的Cookie规范目前仍然没有为所有的浏览器所支持,因而为保险起见,我们应该在Cookie的内容中尽量避免使用这些字符。

最后

以上就是标致草莓为你收集整理的Cookie中特殊字符的坑的全部内容,希望文章能够帮你解决Cookie中特殊字符的坑所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部