国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ASP.NET之Cookie(坑爹的Response.Cookies.Remove)

2019-11-17 02:05:39
字體:
來源:轉載
供稿:網友
asp.net之Cookie(坑爹的Response.Cookies.Remove)

在web開發中Cookie是必不可少的

.NET自然也有一個強大的Cookie操作類,我們用起來也非常方便,不過在使用中我們會發現一個坑爹的事情Response.Cookies.Remove刪除不了Cookie。

例子如下:

[csharp]view plaincopy
  1. PRotectedvoidPage_Load(objectsender,EventArgse)
  2. {
  3. if(!IsPostBack)
  4. {
  5. HttpCookieUserInfo=newHttpCookie("UserInfo");
  6. UserInfo.Value="bdstjk";
  7. Response.Cookies.Add(UserInfo);
  8. }
  9. }
  10. protectedvoidbtnRemoveCookie_Click(objectsender,EventArgse)
  11. {
  12. Response.Cookies.Remove("UserInfo");
  13. Response.Write("<scrjavascript/">alert(/"刪除Cookie成功!/");</script>");
  14. }
  15. protectedvoidbtnCheckCookie_Click(objectsender,EventArgse)
  16. {
  17. if(Request.Cookies["UserInfo"]!=null)
  18. {
  19. Response.Write("Cookie存在,"+Request.Cookies["UserInfo"].Value);
  20. }
  21. else
  22. {
  23. Response.Write("Cookie不存在");
  24. }
  25. }

頁面代碼:

[csharp]view plaincopy
  1. <asp:ButtonID="btnRemoveCookie"runat="server"Text="刪除Cookie"
  2. onclick="btnRemoveCookie_Click"/>
  3. <asp:ButtonID="btnCheckCookie"runat="server"Text="檢查Cookie"
  4. onclick="btnCheckCookie_Click"/>

運行代碼測試,你會發現,怎么點刪除按鈕,cookie都存在,如下圖:

這是為什么呢?明明是執行了刪除cookie的操作,為什么就是刪不掉呢?

我們去看看.NET的HttpCookieCollection實現源碼

[csharp]view plaincopy
  1. publicvoidRemove(stringname)
  2. {
  3. if(this._response!=null)
  4. {
  5. this._response.BeforeCookieCollectionChange();
  6. }
  7. this.RemoveCookie(name);
  8. if(this._response!=null)
  9. {
  10. this._response.OnCookieCollectionChange();
  11. }
  12. }

這個操作在HttpCookieCollection這個集合里面刪除了cookie,當服務器將數據傳輸到客戶端的時候,不會包含這個已經在服務端刪除了的Cookie的任何信息,瀏覽器也就不會對它做任何改變(remove方法只是不讓服務器向客戶機發送那個被刪除的cookie,與此cookie留不留在客戶機里無關)。所以cookie刪除不掉的情況就出現。

那么如果我們想刪除cookie應該怎么做呢?

把刪除cookie的代碼改成如下語句:

[csharp]view plaincopy
  1. if(Request.Cookies["UserInfo"]!=null)
  2. {
  3. Response.Cookies["UserInfo"].Expires=DateTime.Now.AddDays(-1);
  4. }
  5. Response.Write("<scripttype=/"text/Javascript/">alert(/"刪除Cookie成功!/");</script>");

我們再運行程序,測試:

好了。Cookie已經刪除。通過設置Cookie的過期時間為負,強制使Cookie過期。就能實現我們需要的效果了。

既然Response.Cookies.Remove沒有辦法實現我們需要的效果,為什么微軟還有留著呢,因為CookieCollection實現ICollection接口,romove是必須實現的方法,盡管它沒多大的實際價值。而集合的romove也應該是這樣的實現方式,只不過微軟在寫MSDN的時候,描述得太不清楚了,給我們造成了不小的麻煩。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永清县| 太湖县| 乐昌市| 仪征市| 瑞安市| 柳江县| 旺苍县| 甘孜县| 栖霞市| 普定县| 泰顺县| 汕头市| 门头沟区| 申扎县| 保定市| 南通市| 滦南县| 伊吾县| 子洲县| 巴马| 阜平县| 独山县| 临朐县| 安多县| 鸡东县| 临沧市| 乐业县| 涡阳县| 尚义县| 独山县| 延川县| 阿拉善左旗| 沙河市| 姚安县| 巫溪县| 原阳县| 胶州市| 浑源县| 阜宁县| 成武县| 青龙|