主頁(yè) > 知識(shí)庫(kù) > ASP.NET之Response.Cookies.Remove 無(wú)法刪除COOKIE的原因

ASP.NET之Response.Cookies.Remove 無(wú)法刪除COOKIE的原因

熱門標(biāo)簽:百度AI接口 電商新玩法 電銷業(yè)務(wù) 國(guó)美全國(guó)運(yùn)營(yíng)中心 客戶服務(wù) 人工智能 科大訊飛語(yǔ)音識(shí)別系統(tǒng) 網(wǎng)站排名優(yōu)化

例子如下:

復(fù)制代碼 代碼如下:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        HttpCookie UserInfo = new HttpCookie("UserInfo");
        UserInfo.Value = "bdstjk";
        Response.Cookies.Add(UserInfo);
    }

}

protected void btnRemoveCookie_Click(object sender, EventArgs e)
{
    Response.Cookies.Remove("UserInfo");
    Response.Write("script type=\"text/javascript\">alert(\"刪除Cookie成功!\");/script>");
}

protected void btnCheckCookie_Click(object sender, EventArgs e)
{
    if (Request.Cookies["UserInfo"] != null)
    {
        Response.Write("Cookie存在,"+Request.Cookies["UserInfo"].Value);
    }
    else
    {
        Response.Write("Cookie不存在");
    }
}
 


頁(yè)面代碼:
復(fù)制代碼 代碼如下:

asp:Button ID="btnRemoveCookie" runat="server" Text="刪除Cookie"
             />
asp:Button ID="btnCheckCookie" runat="server" Text="檢查Cookie"
             />

運(yùn)行代碼測(cè)試,你會(huì)發(fā)現(xiàn),怎么點(diǎn)刪除按鈕,cookie都存在,如下圖:

 

這是為什么呢?明明是執(zhí)行了刪除cookie的操作,為什么就是刪不掉呢?
我們?nèi)タ纯?NET的HttpCookieCollection實(shí)現(xiàn)源碼

復(fù)制代碼 代碼如下:

public void Remove(string name)
{
    if (this._response != null)
    {
        this._response.BeforeCookieCollectionChange();
    }
    this.RemoveCookie(name);
    if (this._response != null)
    {
        this._response.OnCookieCollectionChange();
    }
}


這個(gè)操作在HttpCookieCollection這個(gè)集合里面刪除了cookie,當(dāng)服務(wù)器將數(shù)據(jù)傳輸?shù)娇蛻舳说臅r(shí)候,不會(huì)包含這個(gè)已經(jīng)在服務(wù)端刪除了的Cookie的任何信息,瀏覽器也就不會(huì)對(duì)它做任何改變(remove方法只是不讓服務(wù)器向客戶機(jī)發(fā)送那個(gè)被刪除的cookie,與此cookie留不留在客戶機(jī)里無(wú)關(guān))。所以cookie刪除不掉的情況就出現(xiàn)。
那么如果我們想刪除cookie應(yīng)該怎么做呢?
把刪除cookie的代碼改成如下語(yǔ)句:
復(fù)制代碼 代碼如下:

if (Request.Cookies["UserInfo"] != null)
{
    Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1);
}
Response.Write("script type=\"text/javascript\">alert(\"刪除Cookie成功!\");/script>");

我們?cè)龠\(yùn)行程序,測(cè)試:

好了。Cookie已經(jīng)刪除。通過(guò)設(shè)置Cookie的過(guò)期時(shí)間為負(fù),強(qiáng)制使Cookie過(guò)期。就能實(shí)現(xiàn)我們需要的效果了。

既然Response.Cookies.Remove沒(méi)有辦法實(shí)現(xiàn)我們需要的效果,為什么微軟還有留著呢,因?yàn)镃ookieCollection實(shí)現(xiàn)ICollection接口,romove是必須實(shí)現(xiàn)的方法,盡管它沒(méi)多大的實(shí)際價(jià)值。而集合的romove也應(yīng)該是這樣的實(shí)現(xiàn)方式,只不過(guò)微軟在寫MSDN的時(shí)候,描述得太不清楚了,給我們?cè)斐闪瞬恍〉穆闊?
您可能感興趣的文章:
  • 詳解在ASP.NET Core 中使用Cookie中間件
  • Asp.net中安全退出時(shí)清空Session或Cookie的實(shí)例代碼
  • ASP.NET中Cookie的使用方法
  • asp.net利用cookie保存用戶密碼實(shí)現(xiàn)自動(dòng)登錄的方法
  • ASP.NET筆記之頁(yè)面跳轉(zhuǎn)、調(diào)試、form表單、viewstate、cookie的使用說(shuō)明
  • ASP.NET Cookie是怎么生成的(推薦)

標(biāo)簽:棗莊 咸寧 拉薩 攀枝花 益陽(yáng) 廈門 POS機(jī) 南平

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET之Response.Cookies.Remove 無(wú)法刪除COOKIE的原因》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266