以前作一個單點登錄的,把生成的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版本和雙引號的問題,能夠參考更詳細的文章: