以前作一个单点登录的,把生成的token字符串存放到cookie中。退出的时候要清理cookie信息。 javascript
①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的时候,设置了哪些参数,如path,domain;那么你在清除的时候,一样必须设置这些参数。否则没法清理成功! 服务器
我就是存cookie的时候设置了domain,清理的时候没有设置。纠结了许久! 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版本和双引号的问题,能够参考更详细的文章: