删除.net core 2.0中的cookie

时间:2018-02-22 02:44:43

标签: c# cookies .net-core-2.0

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

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

我可以使用所需的到期时间创建一个新的cookie,它确实可以正常工作。 我的问题是,Response.Cookies.Delete(key);并没有真正删除Cookie。

Microsoft documentation说我们无法从用户的电脑中删除Cookie。那么有没有办法从硬盘中删除cookie?如果没有,Response.Cookies.Delete(cookie);会做什么?

4 个答案:

答案 0 :(得分:3)

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

    private void DeleteCookies()
    {
        foreach (var cookie in HttpContext.Request.Cookies)
        {
            Response.Cookies.Delete(cookie.Key);
        }
    }

这是内部执行的操作,即在Http Response标头中发送“ 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

答案 1 :(得分:1)

清除响应的cookie并不指示浏览器清除cookie,它只是不会将cookie发送回浏览器。要指示浏览器清除cookie,您需要告诉它cookie已过期,例如

public static void Clear(string key)
{
    var httpContext = new HttpContextWrapper(HttpContext.Current);
    _response = httpContext.Response;

    HttpCookie cookie = new HttpCookie(key) 
        { 
            Expires = DateTime.Now.AddDays(-1) // or any other time in the past
        };
    _response.Cookies.Set(cookie);
}

只是为了添加其他东西,我也将值传回null,例如。

 public static void RemoveCookie(string cookieName)
    {
        if (HttpContext.Current.Response.Cookies[cookieName] != null)
        {
            HttpContext.Current.Response.Cookies[cookieName].Value = null;
            HttpContext.Current.Response.Cookies[cookieName].Expires = DateTime.Now.AddMonths(-1);
        }
    }

答案 2 :(得分:1)

var Cookieoption1 = new CookieOptions();
Cookieoption1.Path = HttpContext.Request.PathBase;

foreach (var cookieKey in Request.Cookies.Keys)
{
    HttpContext.Response.Cookies.Delete(cookieKey, Cookieoption1);
}

答案 3 :(得分:0)

您可以设置Cookie的过期时间,例如:

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

当浏览器从服务器获得响应时,它将看到名称为cookieName的cookie已过期。因此,浏览器将删除cookie。