1

Если запрос приходит с определенным набором печенья, я хочу, чтобы удалить это печенье, и перенаправить обратно на то же действие (и сохранить строку запрос, значение маршрута и т.д.)Удалить кук при переадресации

Я ожидаю, что во втором (перенаправленном) запросе 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); 
    } 

} 

Во время первого запроса, когда я удалить куки, он исчезает из запроса. Но во втором перенаправленном запросе он все еще там! И поэтому приведенный выше код переходит в бесконечный цикл.

Как его удалить?

+1

Вы пробовали удалить куки из объекта ответа, а не запрос? AddYears (-1) также должен работать над объектом ответа – LDJ

ответ

1

Попробуйте это:

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

Трюк состоял в том, чтобы обновить ответ. Это отсутствовало в моем коде. –

0

Я добавляю некоторые из очень важных моментов связанных с печеньем.

  1. Мы всегда можем добавить печенье (временный и постоянный).
  2. Мы не можем удалить файлы cookie, поскольку он будет храниться на клиентском компьютере, и у нас нет полномочий для выполнения операции удаления.

См. Решение ниже для справки.

, если (Request.Cookies [ "идентификатор пользователя"]! = NULL)

{

Response.Cookies [ "UserID"] = Истекает DateTime.Now.AddDays (-1).

}

Пожалуйста, чек на печенье существует или нет, и не использовать Удалить ключевое слово, он не будет работать.

0

Обмен одним из лучших способов, это поможет вам понять больше., Вы также можете использовать дни.

Это не очень обязательно, добавить год только

HttpCookie печенье = Request.Cookies [ "testcookie"];

если (печенье! = NULL)

{

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

Response.Cookies.Добавить (печенье);

}

+0

Сделать смысл .... –

+0

Это идентично ответу, уже указанному выше. –

 Смежные вопросы

  • Нет связанных вопросов^_^