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

时间:2011-07-09 14:26:29

标签: c# asp.net session cookies session-cookies

在我的网站中,当用户点击“退出”按钮时,Logout.aspx页面会加载代码Session.Clear()

在ASP.NET / C#中,这是否清除了所有cookie?或者是否需要添加其他代码才能删除我网站的所有Cookie?

12 个答案:

答案 0 :(得分:129)

尝试类似的东西:

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

但使用

也是有意义的
Session.Abandon();

除了在许多场景中。

答案 1 :(得分:42)

不,只能通过setting the Expiry date为每个Cookie清除Cookie。

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存储,默认情况下)将被删除

答案 2 :(得分:25)

这就是我使用的:

    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 expiredCookie = new HttpCookie(cookie.Name) {
                        Expires = DateTime.Now.AddDays(-1),
                        Domain = cookie.Domain
                    };
                    HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
                }
            }

            // clear cookies server side
            HttpContext.Current.Request.Cookies.Clear();
        }
    }

答案 3 :(得分:8)

不幸的是,对我来说,设置“Expires”并不总是有效。 cookie没有受到影响。

这段代码对我有用:

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

其中"ASP.NET_SessionId"是cookie的名称。这并没有真正删除cookie,而是使用空白cookie覆盖它,这对我来说非常接近。

答案 4 :(得分:4)

我只想指出使用Session.Abandon时不会删除会话ID cookie。

  

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

     

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

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

此代码示例清除服务器的会话状态并设置   会话状态cookie为null。 null值有效清除   来自浏览器的cookie。

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

答案 5 :(得分:2)

您绝不应将密码存储为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
    }

答案 6 :(得分:2)

将OP的问题标题删除为所有Cookie - “删除网站中的Cookie”

我在网上找到了Dave Domagala的代码。我编辑了Dave's以允许谷歌分析cookie - 它通过网站上的所有cookie循环并删除它们。 (从开发人员的角度 - 将新代码更新到现有站点,可以避免用户重新访问该站点时出现问题。)

我首先使用以下代码,首先阅读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,因此如果您使用Google Analytics - 保留__utmz Cookie可能会很有用,因为这会跟踪访问者的来源,搜索引擎是什么使用过,点击了什么链接,使用了什么关键字,以及访问网站时它们在世界上的位置。

为了保持它,一旦知道了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);    
}

答案 7 :(得分:1)

虽然这是一个老线程,但我想如果有人在将来仍在寻找解决方案。

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

这就是我的诀窍。

答案 8 :(得分:1)

现在是2018年,因此在ASP.NET Core中,有一个直接内置的函数。要删除Cookie,请尝试以下代码:

if(Request.Cookies["aa"] != null)
{
    Response.Cookies.Delete("aa");
}
return View();

答案 9 :(得分:0)

Response.Cookies [“ UserSettings”]。Expires = DateTime.Now.AddDays(-1)

答案 10 :(得分:0)

您必须设置过期日期才能删除Cookie

Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));

如果cookie不存在,这不会引发异常。

答案 11 :(得分:0)

如果有人喜欢,我强烈更喜欢这个。

string COOKIE_NAME = "COOCKIE NAME"

if (HttpContext.Request.Cookies.AllKeys.Contains(COOKIE_NAME))
        {
            HttpCookie Cookie = HttpContext.Request.Cookies[COOKIE_NAME];
            engagementIdCookie.Expires = DateTime.Now.AddDays(-1);
            Response.Cookies.Add(Cookie);
        }