在重定向期间删除 cookie

Delete cookie during redirect

如果请求带有特定的 cookie 集,我想删除该 cookie,然后重定向回相同的操作(并保留查询字符串、路由值等)

我希望在第二个(重定向的)请求中,cookie 会消失。 但事实并非如此。

我的操作方法:

[DeleteCookie]
public virtual ActionResult doStuff() {
  // blah
}

我的操作过滤器:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class DeleteCookieAttribute : ActionFilterAttribute {

  public override void OnActionExecuting(ActionExecutingContext context) {

    var request = context.HttpContext.Request;

    if (request.Cookies.AllKeys.Contains("foo")) {
      request.Cookies["foo"].Expires = DateTime.Now.AddYears(-1);     // I tried this
      request.Cookies.Remove("foo");                                  // I tried this
      context.Result = new RedirectToRouteResult(context.RouteData.Values);
    }

  base.OnActionExecuting(_filterContext);
  }

}

在第一次请求期间,一旦我删除了 cookie,它就会从请求中消失。但是在第二次重定向请求中,它仍然存在!所以上面的代码进入了无限循环。

如何删除它?

试试这个:

HttpCookie cookie = Request.Cookies["foo"];
if (cookie != null)
{
    cookie .Expires = DateTime.Now.AddYears(-1);
    Response.Cookies.Add(cookie);
}

我正在添加一些与 cookie 相关的非常重要的要点

  1. 我们可以随时添加 cookie(临时和永久)。
  2. 我们不能删除cookie,因为它会存储在客户端机器上,我们没有权限进行删除操作。

参考以下解决方案供您参考。

if (Request.Cookies["userId"] != null)

{

Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);

}

请检查 cookie 是否存在,不要使用 Remove 关键字,它不会起作用。

分享一个最好的方法,它会帮助你了解更多。,你也可以使用几天。

不是很强制,你只需要添加年份

HttpCookie cookie = Request.Cookies["testcookie"];

if (cookie != null)

{

cookie.Expires = DateTime.Now.AddDays(-1);

Response.Cookies.Add(cookie);

}

我无法让 cookie 过期和页面重定向(至少不是通过 MVC)。

如本回答所述:

我不得不使 cookie 过期,然后显示一个视图,并在该视图中重定向。 (在我的例子中,我使用 RedirectToAction 重定向回相同的控制器操作。)

@{
    ViewBag.Title = "Expire";
    Layout = null;
    Response.Redirect( Url.Action("Index", "Home"), false);
}