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

相關文章
相關標籤/搜索