Как очистить файлы cookie с помощью asp.net mvc 3 и С#?
Хорошо, поэтому я действительно думаю, что я делаю это правильно, но файлы cookie не очищаются.
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 и движется дальше, как будто я никогда не выходил из системы. Любые мысли?
Ответы
Ответ 1
Ты близко. Вам нужно будет использовать объект Response для записи в браузер:
if ( Request.Cookies["MyCookie"] != null )
{
var c = new HttpCookie( "MyCookie" );
c.Expires = DateTime.Now.AddDays( -1 );
Response.Cookies.Add( c );
}
Подробнее о MSDN, Как удалить cookie.
Ответ 2
Cookies хранятся на клиенте, а не на сервере, поэтому Session.Clear не будет влиять на них. Кроме того, Request.Cookies заполняется IIS и передается вашей странице с каждым запросом на страницу; добавление/удаление cookie из этой коллекции ничего не делает.
Попробуйте выполнить аналогичное действие с Response.Cookies. Это должно заставить вашего клиента перезаписать старый файл cookie с новым, что приведет к его истёкшему.
Ответ 3
Я сделал это, и он работал для очистки (не удаления) 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);
}