在重定向期间删除cookie

时间:2015-09-24 12:47:32

标签: asp.net asp.net-mvc cookies httprequest response.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,它就会从请求中消失。但在第二个重定向请求中,它仍然存在!所以上面的代码进入了无限循环。

如何删除它?

4 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:0)

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

  1. 我们可以随时添加Cookie(临时和永久)。
  2. 我们无法删除Cookie ,因为它会存储在客户端计算机中,我们无权执行删除操作。
  3. 请参阅以下解决方案以供参考。

      

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

         

    {

         

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

         

    }

    请检查是否存在Cookie,不要使用删除关键字,否则无效。

答案 2 :(得分:0)

分享最佳方式之一,它可以帮助您了解更多。,您也可以使用天。

这不是非常强制性的,您只需添加年份

  

HttpCookie cookie = Request.Cookies [“testcookie”];

     

if(cookie!= null)

     

{

     

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

     

Response.Cookies.Add(饼干);

     

}

答案 3 :(得分:0)

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

如本答案所述:https://stackoverflow.com/a/21134768/2068719

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

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