2015-09-24 22 views
1

刪除Cookie如果請求具有一定的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,它從請求消失。但在第二次重定向請求中,它仍然存在!所以上面的代碼進入了一個無限循環。

我該如何刪除它?

+1

你試過從響應對象,而不是要求刪除的cookie? AddYears(-1)也應該在響應對象 – LDJ

回答

1

試試這個:

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

上工作。技巧是更新響應。我的代碼中缺少這個。 –

0

我加入了一些相關的cookies 非常重要的點的。

  1. 我們可以隨時添加餅乾(臨時和永久)。
  2. 我們無法刪除Cookie,因爲它將存儲在客戶端計算機中,並且我們無權執行刪除操作。

請參考下面的解決方案供您參考。

如果(Request.Cookies時[ 「用戶id」]!= NULL)

{

Response.Cookies [ 「用戶id」]過期= DateTime.Now.AddDays(-1)。

}

請做餅乾存在與否,不使用刪除關鍵字檢查,它不會工作。

0

分享最好的方法之一,它會幫助你瞭解更多,你也可以使用日子。

這不是很強制的,你添加年僅

的HttpCookie餅乾= Request.Cookies時[ 「testcookie」];

如果(餅乾!= NULL)

{

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

Response.Cookies。加入(餅乾);

}

+0

有意義...... –

+0

這與上面已經給出的答案是相同的。 –