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

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

清除cookie有以下几种方法

①javascript方法 java

<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方法 apache

其一 tomcat

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保存的字符串中有时候会自动加上双引号

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

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

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

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

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

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

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

相关文章
相关标签/搜索