最近作到一個asp.net項目,項目中保存用戶信息用到了cookie,所以,在註銷身份的時候,就須要清除掉cookie。瀏覽器
我先是試驗了這種代碼,在沒有特殊聲明前,代碼都是寫在Page_Load方法中,cookie
this.Response.Cookies.Clear();
事實證實,這是木有效果的。。。
而後我想到了我之前看到的書裏講到的,能夠經過設置過時時間爲過去,以刪除cookie,因此我修改了代碼:asp.net
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的過時時間爲過去時間來達到
頭腦裏邊整理下思路,果斷這樣寫來進行測試了:this
for (int i = 0; i < this.Request.Cookies.Count; i++) { this.Response.Cookies[this.Request.Cookies[i].Name].Expires = DateTime.Now.AddDays(-1); }
結果OK,算是搞定了,想到我是否是應該稍微封裝下,以方便之後使用,因而就封裝到了一個工具類方法裏邊,具體請查看下邊的代碼;.net
/// <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中卻獲取不到了,不知道園子裏邊有沒有大神給分析一下啊。
辭職,敬禮調試