cookie注销的几种方法与注意事项

之前做一个单点登陆的,把生成的token字符串存放到cookie中。退出的时候要清理cookie信息。

清除cookie有如下几种方法

①javascript方法

<script type="text/javascript">
function delCookie(name) {
    var date = new Date();
    date.setTime(0);
    var str = name + "=" + encodeURIComponent('') + "; expires=" +     date.toGMTString()+"; path=/";
    document.cookie = str;
}
    delCookie('${tokenName}');
    window.location.href='${startReferer}';
</script>

②java方法

其一

    Cookie cookies[] = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals(cookiename)) {
                    cookie.setMaxAge(0);
                    cookie.setPath("/");
                    cookie.setDomain(domain);
                    response.addCookie(cookie);
                    break;
                }
            }
        }
其二
 Cookie cookie = new Cookie(cookieame, null);
 cookie.setMaxAge(0); // 删除旧 cookie, 避免新 cookie 不生效
 cookie.setPath("/");
 response.addCookie(cookie);

清理cookie的常见问题:

问题一:清理cookie不成功/无法成功清理cookie

你在存cookie的时候,设置了哪些参数,如path,domain;那么你在清除的时候,同样必须设置这些参数。不然无法清理成功!

我就是存cookie的时候设置了domain,清理的时候没有设置。纠结了许久!

问题二:cookie保存的字符串中有时候会自动加上双引号

我就遇到了这样的问题,而且有双引号的时候不能客户那边不能解析,要求去掉双引号。

在cookie的version1和tomcat6以后,cookie中若存在一些特殊字符如/=?之类的,会自动给你加上双引号的。这是tomcat的的处理机制。

要强制避免双引号,可以cookie.setversion(2),不推荐!!没有这个版本,这不过是个漏洞。

或者设置tomcat的参数org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true。这个会造成一些其他的影响,详细见tomcat文档。

这些强制避免双引号的做法都是不正确的。没有老掉牙的http服务器都可以处理双引号的cookie。遇到这样子的问题,让客户他们自己去修改和处理!

关于cookie版本和双引号的问题,可以参考更详细的文章:

http://blog.csdn.net/joanna2008/article/details/5935105

你可能感兴趣的:(cookie,清除,双引号,cookie版本)