Response.Cookies.RemoveがCOOKIEを削除できない理由

2942 ワード

Web開発においてCookieは欠かせない.NETにも強力なCookie操作クラスがあり、私たちもとても便利ですが、使用中にお父さんのことを発見します.Response.Cookies.RemoveはCookieを削除できません.
例は次のとおりです.
 
    
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("alert(\" Cookie !\");");
}

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


ページコード:
 
    

コードテストを実行すると、ボタンを削除する方法、クッキーが次の図に表示されます.
 
これはなぜですか.クッキーを削除する操作を実行しているのに、どうして削除できないのですか?見に行きましょう.NETのHttpCookieCollection実装ソースコード
 
    
public void Remove(string name)
{
    if (this._response != null)
    {
        this._response.BeforeCookieCollectionChange();
    }
    this.RemoveCookie(name);
    if (this._response != null)
    {
        this._response.OnCookieCollectionChange();
    }
}

この操作はHttpCookieCollectionという集合の中でcookieを削除し、サーバがクライアントにデータを転送すると、サービス側で削除したCookieの情報は含まれず、ブラウザもそれを変更しません(removeメソッドはサーバに削除されたcookieをクライアントに送信させないだけで、このcookieがクライアントに残らないこととは関係ありません).だからクッキーが削除できない場合があります.
では、クッキーを削除したい場合はどうすればいいのでしょうか.
クッキーを削除するコードを次の文に変更します.
 
    
if (Request.Cookies["UserInfo"] != null)
{
    Response.Cookies["UserInfo"].Expires = DateTime.Now.AddDays(-1);
}
Response.Write("alert(\" Cookie !\");");

プログラムを再実行し、テストします.
はい.Cookieは削除されました.Cookieの有効期限を負に設定することで、強制的にCookieを有効期限切れにします.私たちが必要とする効果を実現することができます.
Response.Cookies.Removeは私たちが必要とする効果を実現することができません.なぜマイクロソフトはまだ残っていますか.CookieCollectionはICollectionインタフェースを実現するため、romoveは実現しなければならない方法ですが、実際の価値はあまりありません.集合のromoveもこのような実現方式であるべきだが、マイクロソフトがMSDNを書いたとき、説明があまりにもはっきりしていないので、私たちに大きな迷惑をかけた.