Asp.Net Cookie的清除


背景

最近做到一個asp.net項目,項目中保存用戶信息用到了cookie,因此,在注銷身份的時候,就需要清除掉cookie。

探索過程

我先是試驗了這種代碼,在沒有特殊聲明前,代碼都是寫在Page_Load方法中,

    this.Response.Cookies.Clear();

事實證明,這是木有效果的。。。
然后我想到了我以前看到的書里講到的,可以通過設置過期時間為過去,以刪除cookie,所以我修改了代碼:

    foreach (HttpCookie item in this.Response.Cookies)
        {
            item.Expires = DateTime.Now.AddDays(-1);
        }

這樣寫有效果了,但是發現只是清除了一部分我希望清楚的cookie。。。尼瑪!!

然后我就調試檢查問題,發現在Response.Cookies的集合里邊,並沒有全部包括我要清除的cookie,反而是在Request.Cookies集合里邊全部包含了,我中間還因此把以上代碼中的
Response改寫成Request,結果一個沒有清楚掉。。。基礎不牢的錯

好吧,我的目的很簡單:
1.找到我要清楚的cookie的key,這個從Request中我可以獲取到
2.清楚瀏覽器cookie,這個我可以通過設置response的Cookie的過期時間為過去時間來達到
頭腦里邊整理下思路,果斷這樣寫來進行測試了:

    for (int i = 0; i < this.Request.Cookies.Count; i++)
        {
            this.Response.Cookies[this.Request.Cookies[i].Name].Expires = DateTime.Now.AddDays(-1);
        }

結果OK,算是搞定了,想到我是不是應該稍微封裝下,以方便以后使用,於是就封裝到了一個工具類方法里邊,具體請查看下邊的代碼;

代碼

    /// <summary>
    /// 清除指定cookie
    /// </summary>
    /// <param name="contenxt">The contenxt.</param>
    /// <param name="cookies">The cookies.</param>
    public static void ClearCookies(HttpContext contenxt,params string[] cookies)
    {
        //清除cookies
        foreach (string key in cookies)
        {
            contenxt.Response.Cookies[key].Expires = DateTime.Now.AddDays(-1);
        }
    }
    /// <summary>
    /// 清空所有cookie
    /// </summary>
    /// <param name="contenxt">The contenxt.</param>
    public static void ClearCookiesAll(HttpContext contenxt)
    {
        //清除cookies
        for (int i = 0; i < contenxt.Request.Cookies.Count; i++)
        {
            contenxt.Response.Cookies[contenxt.Request.Cookies[i].Name].Expires = DateTime.Now.AddDays(-1);
        }
    }

疑問

最后,其實我還是有疑問的,為什么在Request中可以獲取到的cookie,在response中卻獲取不到了,不知道園子里邊有沒有大神給分析一下啊。
辭職,敬禮


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM