Response.Cookies.RemoveがCOOKIEを削除できない理由
Web開発においてCookieは欠かせない.NETにも強力なCookie操作クラスがあり、私たちもとても便利ですが、使用中にお父さんのことを発見します.Response.Cookies.RemoveはCookieを削除できません.
例は次のとおりです.
ページコード:
コードテストを実行すると、ボタンを削除する方法、クッキーが次の図に表示されます.
これはなぜですか.クッキーを削除する操作を実行しているのに、どうして削除できないのですか?見に行きましょう.NETのHttpCookieCollection実装ソースコード
この操作はHttpCookieCollectionという集合の中でcookieを削除し、サーバがクライアントにデータを転送すると、サービス側で削除したCookieの情報は含まれず、ブラウザもそれを変更しません(removeメソッドはサーバに削除されたcookieをクライアントに送信させないだけで、このcookieがクライアントに残らないこととは関係ありません).だからクッキーが削除できない場合があります.
では、クッキーを削除したい場合はどうすればいいのでしょうか.
クッキーを削除するコードを次の文に変更します.
プログラムを再実行し、テストします.
はい.Cookieは削除されました.Cookieの有効期限を負に設定することで、強制的にCookieを有効期限切れにします.私たちが必要とする効果を実現することができます.
Response.Cookies.Removeは私たちが必要とする効果を実現することができません.なぜマイクロソフトはまだ残っていますか.CookieCollectionはICollectionインタフェースを実現するため、romoveは実現しなければならない方法ですが、実際の価値はあまりありません.集合のromoveもこのような実現方式であるべきだが、マイクロソフトがMSDNを書いたとき、説明があまりにもはっきりしていないので、私たちに大きな迷惑をかけた.
例は次のとおりです.
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を書いたとき、説明があまりにもはっきりしていないので、私たちに大きな迷惑をかけた.