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

loc*_*ock 78 c# asp.net cookies session session-cookies

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

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

Kir*_*ill 133

尝试类似的东西:

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

但使用也很有意义

Session.Abandon();
Run Code Online (Sandbox Code Playgroud)

除了在许多情况下.

  • `Session.Abandon`将清除ASP.NET会话cookie,但不会清除您手动设置的cookie,例如userID.并且`Cookies ["无论什么"]`永远不会为空; 如果您要求不存在cookie,框架将创建一个cookie. (15认同)
  • @Andomar,实际上`Cookies ["whatever"]`当cookie不存在时返回null!我知道这是一个陈旧的评论,但我不希望其他读者被这个评论误导. (8认同)
  • @NunoAgapito很老但是对于其他用户,如果你从"请求"中读取,则Cookies ["whatever"]返回null,如果从"Response"读取,则返回空cookie. (6认同)
  • 同样非常重要的是,"Expires"未设置为"DateTime.MinValue",因为这实际上会给cookie一个会话过期,这意味着在删除cookie之前它会等待浏览器/选项卡(依赖浏览器)关闭. (5认同)

VMA*_*Atm 44

不可以,只能通过为每个Cookie 设置过期日期来清除Cookie .

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

目前Session.Clear():

  • Session收集的所有键值对都将被删除.Session_End事件没有发生.

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

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

  • 这段代码可以在一行"Response.Cookies ["UserSettings"]中进行优化.Expires = DateTime.Now.AddDays(-1)`.这里服务器将请求浏览器删除cookie.如果存在,浏览器将删除它. (3认同)
  • 啊哈,看起来它只为`Response`对象创建一个cookie.有趣:) (2认同)
  • 是的,对我来说,我需要Response.Cookies.Add(myCookie)部分-没有它,它将无法始终/正确地工作。谢谢。 (2认同)

pix*_*its 26

这是我使用的:

    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();
        }
    }
Run Code Online (Sandbox Code Playgroud)


Buh*_*ica 10

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

这段代码对我有用:

HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Run Code Online (Sandbox Code Playgroud)

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


MTs*_*MTs 5

我只想指出,正如其他人所说,在使用 Session.Abandon 时不会删除 Session ID cookie。

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

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

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Run Code Online (Sandbox Code Playgroud)

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

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


Sai*_*uti 5

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

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