【问题标题】:Delete cookie during redirect在重定向期间删除 cookie
【发布时间】:2015-12-22 01:54:32
【问题描述】:

如果一个请求带有某个 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,它就会从请求中消失。但是在第二个重定向请求中,它仍然存在!所以上面的代码进入了一个无限循环。

如何删除它?

【问题讨论】:

  • 您是否尝试过从响应对象中删除 cookie,而不是从请求中删除? AddYears(-1) 也应该在响应对象上工作

标签: asp.net asp.net-mvc cookies httprequest response.redirect


【解决方案1】:

试试这个:

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

【讨论】:

  • 诀窍是更新响应。我的代码中没有。
【解决方案2】:

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

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

请参考以下解决方案。

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

{

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

}

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

【讨论】:

    【解决方案3】:

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

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

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

    如果 (cookie != null)

    {

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

    Response.Cookies.Add(cookie);

    }

    【讨论】:

      【解决方案4】:

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

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

      我必须使 cookie 过期,然后显示一个视图,并在该视图中重定向。 (在我的情况下,我使用 RedirectToAction 重定向回相同的控制器操作。)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 2013-03-29
        • 2018-09-03
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 2012-11-06
        相关资源
        最近更新 更多