之前做一个单点登陆的,把生成的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