如何删除ASP.NET网站上的Cookie

在我的网站上,当用户点击“注销”button时,Logout.aspx页面加载代码Session.Clear()

在ASP.NET / C#中,这是否清除所有cookie? 还是有任何其他代码需要添加删除我的网站的所有cookie?

尝试类似的东西:

 if (Request.Cookies["userId"] != null) { Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1); } 

但是使用也是有意义的

 Session.Abandon(); 

此外在许多情况下。

不可以,Cookies只能通过设置每个人的到期date来清除。

 if (Request.Cookies["UserSettings"] != null) { HttpCookie myCookie = new HttpCookie("UserSettings"); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); } 

Session.Clear()的时刻:

  • Session集合中的所有键值对都被删除。 Session_End事件不会发生。

如果在注销期间使用此方法,则还应该使用Session.Abandon方法来Session_End事件:

  • 具有会话ID的Cookie(如果您的应用程序使用cookie作为默认会话ID存储)将被删除

这是我使用的:

  private void ExpireAllCookies() { if (HttpContext.Current != null) { int cookieCount = HttpContext.Current.Request.Cookies.Count; for (var i = 0; i < cookieCount; i++) { var cookie = HttpContext.Current.Request.Cookies[i]; if (cookie != null) { var cookieName = cookie.Name; var expiredCookie = new HttpCookie(cookieName) {Expires = DateTime.Now.AddDays(-1)}; HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it } } // clear cookies server side HttpContext.Current.Request.Cookies.Clear(); } } 

不幸的是,对我来说,设置“过期”并不总是工作。 cookie不受影响。

这段代码对我有用:

 HttpContext.Current.Session.Abandon(); HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); 

其中"ASP.NET_SessionId"是cookie的名称。 这并不是真的删除了cookie,而是用一个空白的cookie来覆盖它,这对我来说已经足够接近了。

我只想指出,使用Session.Abandon会话ID Cookie不会像其他人所说的那样被删除。

当您放弃会话时,会话ID cookie不会从用户的浏览器中删除。 因此,只要会话被放弃,对同一应用程序的任何新请求都将使用相同的会话标识,但会有一个新的会话状态实例。 同时,如果用户在同一DNS域中打开另一个应用程序,则在从一个应用程序调用Abandon方法后,用户不会丢失其会话状态。

有时,您可能不想重复使用会话ID。 如果你这样做了,并且了解了不重用会话ID的后果,请使用以下代码示例放弃会话并清除会话ID cookie:

 Session.Abandon(); Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); 

此代码示例从服务器清除会话状态,并将会话状态cookie设置为空。 空值有效地从浏览器中清除cookie。

http://support.microsoft.com/kb/899918

您不应该将密码存储为cookie。 要删除一个cookie,你真的只需要修改和过期。 您不能真正删除它,即从用户的磁盘中删除它。

这是一个示例:

 HttpCookie aCookie; string cookieName; int limit = Request.Cookies.Count; for (int i=0; i<limit; i++) { cookieName = Request.Cookies[i].Name; aCookie = new HttpCookie(cookieName); aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday Response.Cookies.Add(aCookie); // overwrite it } 

以OP的问题标题删除所有cookies – “删除网站中的Cookies”

我在网上find了Dave Domagala的代码。 我编辑了Dave,允许使用Google Analytics(分析)Cookie,这些cookies通过网站上的所有Cookie循环播放,并全部删除。 (从开发人员的angular度来看 – 将新代码更新到现有网站中,是避免用户重新访问网站的一个很好的方法)。

我使用下面的代码先读取cookie,保存所有必需的数据 – 然后在用下面的循环清洗所有的东西之后重新设置cookie。

代码:

 int limit = Request.Cookies.Count; //Get the number of cookies and //use that as the limit. HttpCookie aCookie; //Instantiate a cookie placeholder string cookieName; //Loop through the cookies for(int i = 0; i < limit; i++) { cookieName = Request.Cookies[i].Name; //get the name of the current cookie aCookie = new HttpCookie(cookieName); //create a new cookie with the same // name as the one you're deleting aCookie.Value = ""; //set a blank value to the cookie aCookie.Expires = DateTime.Now.AddDays(-1); //Setting the expiration date //in the past deletes the cookie Response.Cookies.Add(aCookie); //Set the cookie to delete it. } 

此外:如果您使用Google Analytics

上面的循环/删除将删除所有的网站cookie,所以如果你使用谷歌分析 – 可能会有用的坚持__utmz cookie,因为这个人跟踪访客来自哪里,使用什么search引擎,什么链接被点击,使用了什么关键字,以及访问网站时他们在世界的哪个位置。

所以为了保持它,一旦知道cookie名称,就包装一个简单的if语句:

 ... aCookie = new HttpCookie(cookieName); if (aCookie.Name != "__utmz") { aCookie.Value = ""; //set a blank value to the cookie aCookie.Expires = DateTime.Now.AddDays(-1); HttpContext.Current.Response.Cookies.Add(aCookie); } 

虽然这是一个古老的线索,我想如果有人仍然在寻找解决scheme。

 HttpCookie mycookie = new HttpCookie("aa"); mycookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(mycookie1); 

那是什么对我来说。