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