清除Asp.net Core中的所有cookie

问题描述 投票:0回答:3

我正在开发一个 Asp.net Core 网站,在我的注销链接中,我想删除所有当前域 cookie。 当我使用 Asp.net MVC 时,我尝试了这段代码

string[] myCookies = Request.Cookies.AllKeys;
foreach (string cookie in myCookies)
{
  Response.Cookies[cookie].Expires = DateTime.Now.AddDays(-1);
}

此代码在 Asp.net Core 中不起作用。 如何清除 Asp.net Core 中的所有 cookie?

asp.net-core cookies
3个回答
49
投票

Request.Cookies
是一个键值集合,其中Key是cookie名称。所以

foreach (var cookie in Request.Cookies.Keys)
{
    Response.Cookies.Delete(cookie);
}

参见:

public abstract class HttpRequest
{
    // Summary:
    //     /// Gets the collection of Cookies for this request. ///
    //
    // Returns:
    //     The collection of Cookies for this request.
    public abstract IRequestCookieCollection Cookies { get; set; }
    ...
 }

IRequestCookieCollection

public interface IRequestCookieCollection : IEnumerable<KeyValuePair<string, string>>, IEnumerable

1
投票

试试这个:

//ASP.NET Core
foreach (string cookie in myCookies)
{
  Response.Cookies.Delete(cookie);  
}

0
投票

在 .NET 6 及更高版本中

    private void ClearCookie()
    {
        foreach (var cookie in Request.Cookies.Keys)
        {
            Response.Cookies.Delete(cookie);
        }
    }

    // While Signing out

    [Authorize]
    public IActionResult SignOut(bool isAccountDeleted = false)
    {
        ClearCookie();
        return SignOut(
            new AuthenticationProperties
            {
                RedirectUri = $"Home/Signin",
            },
            CookieAuthenticationDefaults.AuthenticationScheme,
            OpenIdConnectDefaults.AuthenticationScheme);
    }
© www.soinside.com 2019 - 2024. All rights reserved.