Как вы очищаете куки, используя asp.net mvc 3 и c #? - PullRequest
54 голосов
/ 25 февраля 2011

Хорошо, я действительно думаю, что все делаю правильно, но куки не очищаются.

 Session.Clear();
 HttpCookie c = Request.Cookies["MyCookie"];
 if (c != null)
 {
     c = new HttpCookie("MyCookie");
     c["AT"] = null;
     c.Expires = DateTime.Now.AddDays(-1);
     Request.Cookies.Add(c);
 }

 return RedirectToAction("Index", "Home");

Когда происходит перенаправление, он снова находит cookie и продолжает работать, как будто я никогда не выходил из системы. Есть мысли?

Ответы [ 3 ]

103 голосов
/ 26 февраля 2011

Ты рядом.Вам потребуется использовать объект Response для обратной записи в браузер:

if ( Request.Cookies["MyCookie"] != null )
{
    var c = new HttpCookie( "MyCookie" );
    c.Expires = DateTime.Now.AddDays( -1 );
    Response.Cookies.Add( c );
}

Дополнительная информация о MSDN, Как: удалить cookie .

9 голосов
/ 25 февраля 2011

Cookies хранятся на клиенте, а не на сервере, поэтому Session.Clear не повлияет на них.Кроме того, Request.Cookies заполняется IIS и передается на вашу страницу при каждом запросе страницы;добавление / удаление cookie из этой коллекции ничего не делает.

Попробуйте выполнить аналогичное действие с Response.Cookies.Это должно привести к тому, что ваш клиент перезапишет старый cookie новым, что приведет к истечению срока его действия.

4 голосов
/ 30 апреля 2012

Я сделал это, и это сработало для очистки (не удаления) сеансового cookie:

HttpContext.Response.Cookies.Set(new HttpCookie("cookie_name"){Value = string.Empty});

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

/// <summary>
/// Deletes a cookie with specified name
/// </summary>
/// <param name="controller">extends the controller</param>
/// <param name="cookieName">cookie name</param>
public static void DeleteCookie(this Controller controller, string cookieName)
{
    if (controller.HttpContext.Request.Cookies[cookieName] == null)
            return; //cookie doesn't exist

    var c = new HttpCookie(cookieName)
                {
                    Expires = DateTime.Now.AddDays(-1)
                };
    controller.HttpContext.Response.Cookies.Add(c);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...