我正在研究.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);
做什么?
清除响应的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);
}
}
您可以设置Cookie的过期时间,如:
Response.Cookies.Append("cookieName", "", new CookieOptions() {
Expires = DateTime.Now.AddDays(-1)
});
当浏览器从服务器获得响应时,它将看到名为cookieName
的cookie已过期。因此,浏览器将删除cookie。