欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2013年06月13日 10:16:46   作者:  
在web開(kāi)發(fā)中Cookie是必不可少的,.NET自然也有一個(gè)強(qiáng)大的Cookie操作類(lèi),我們用起來(lái)也非常方便,不過(guò)在使用中我們會(huì)發(fā)現(xiàn)一個(gè)坑爹的事情Response.Cookies.Remove刪除不了Cookie。

例子如下:

復(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ù)娇蛻?hù)端的時(shí)候,不會(huì)包含這個(gè)已經(jīng)在服務(wù)端刪除了的Cookie的任何信息,瀏覽器也就不會(huì)對(duì)它做任何改變(remove方法只是不讓服務(wù)器向客戶(hù)機(jī)發(fā)送那個(gè)被刪除的cookie,與此cookie留不留在客戶(hù)機(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ò)微軟在寫(xiě)MSDN的時(shí)候,描述得太不清楚了,給我們?cè)斐闪瞬恍〉穆闊?

相關(guān)文章

最新評(píng)論