我正在开发一个 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?
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; }
...
}
public interface IRequestCookieCollection : IEnumerable<KeyValuePair<string, string>>, IEnumerable
试试这个:
//ASP.NET Core
foreach (string cookie in myCookies)
{
Response.Cookies.Delete(cookie);
}
在 .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);
}