删除 .net core 2.0 中的 cookie

Pir*_*ate 9 c# cookies .net-core-2.0

我正在研究 .Net Core 2.0 MVC Web 应用程序。需要操作身份验证 cookie 以根据用户角色设置过期时间跨度。在过期时间跨度后,如果没有活动,用户将退出应用程序。为此,我创建了一个过滤器,每次用户与站点交互时都会调用它。在该过滤器中,我基本上是读取 cookie 值,将其存储在临时变量中,删除现有 cookie,并将具有相同键和值的新 cookie 附加到响应中。

var cookieContent = Request.Cookie[key];
Response.Cookies.Delete(key);
Response.Cookies.Append(new cookie with same name and value);
Run Code Online (Sandbox Code Playgroud)

我能够创建一个具有所需过期时间的新 cookie,并且它工作正常。我的问题是,Response.Cookies.Delete(key);并没有真正删除 cookie。

Microsoft 文档说我们无法从用户的 PC 中删除 cookie。那么有没有办法从硬盘驱动器中删除cookie?如果不是,有什么作用Response.Cookies.Delete(cookie);

Dav*_*ack 20

在 ASP.NET Core 中,您可以/应该使用以下方法:

    private void DeleteCookies()
    {
        foreach (var cookie in HttpContext.Request.Cookies)
        {
            Response.Cookies.Delete(cookie.Key);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这在内部所做的是在 Http 响应头中发送“Set-Cookie”指令,以指示浏览器使 cookie 过期并清除其值。

示例响应头:

HTTP/1.1 302 Found
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Server: Microsoft-IIS/10.0
Set-Cookie: Cookie1=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; secure; samesite=lax
Set-Cookie: Cookie2=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; secure; samesite=lax
Set-Cookie: Cookie3=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; secure; samesite=lax
Run Code Online (Sandbox Code Playgroud)


alp*_*yol 8

您可以为 cookie 设置过期时间,例如:

Response.Cookies.Append("cookieName", "", new CookieOptions() {
    Expires = DateTime.Now.AddDays(-1)
});
Run Code Online (Sandbox Code Playgroud)

当浏览器从服务器得到响应时,它会看到带有 name 的 cookiecookieName已经过期。因此,浏览器会删除cookie。