Как удалить куки на экране ASP.NET сайт
на моем сайте, когда пользователь нажимает на кнопку "Выход", выход из системы.в aspx-страница с кодом Session.Clear().
In ASP.NET/C#, это очищает все куки? Или есть какой-либо другой код, который должен быть добавлен, чтобы удалить все файлы cookie моего сайта?
10 ответов:
попробуйте что-то вроде этого:
if (Request.Cookies["userId"] != null) { Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1); }но это также имеет смысл использовать
Session.Abandon();кроме того, во многих сценариях.
нет, печенье можно очистить только с помощью установка срока годности для каждого из них.
if (Request.Cookies["UserSettings"] != null) { HttpCookie myCookie = new HttpCookie("UserSettings"); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); }на момент
Session.Clear():
- все пары ключ-значение из
Sessionколлекция удаляются.Session_Endсобытие не произойдет.если вы используете этот метод во время выхода из системы, вы также должны использовать
Session.AbandonметодSession_Endсобытие:
- Cookie с идентификатором сеанса (если ваше приложение использует файлы cookie для сеанса ID store, который по умолчанию) удаляется
вот что я использую:
private void ExpireAllCookies() { if (HttpContext.Current != null) { int cookieCount = HttpContext.Current.Request.Cookies.Count; for (var i = 0; i < cookieCount; i++) { var cookie = HttpContext.Current.Request.Cookies[i]; if (cookie != null) { var expiredCookie = new HttpCookie(cookie.Name) { Expires = DateTime.Now.AddDays(-1), Domain = cookie.Domain }; HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it } } // clear cookies server side HttpContext.Current.Request.Cookies.Clear(); } }
к сожалению, для меня установка "Expires" не всегда работала. Печенье не пострадало.
этот код работал для меня:
HttpContext.Current.Session.Abandon(); HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));здесь
"ASP.NET_SessionId"- это имя файла cookie. Это действительно не удаляет файл cookie, но переопределяет его пустым файлом cookie, который был достаточно близок для меня.
Я просто хочу отметить, что идентификатор сеанса cookie не удаляется при использовании сеанса.Откажитесь, как говорили другие.
при отказе от сеанса файл cookie идентификатора сеанса не удаляется браузер пользователя. Поэтому, как только сессия была оставленный, любые новые запросы к тому же приложению будут использовать то же самое идентификатор сеанса, но будет иметь новый экземпляр состояния сеанса. В то же время, если пользователь открывает другое приложение в том же DNS домен, пользователь не потеряет свое состояние сеанса после отказа метод вызывается из одного приложения.
иногда, вы не можете повторно использовать идентификатор сессии. Если вы это сделаете и если вы понимаете последствия не повторного использования идентификатора сеанса, используйте в следующем примере кода для отказа от сеанса и очистки сессионной cookie:
Session.Abandon(); Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));этот пример кода очищает состояние сеанса от сервера и устанавливает файл cookie состояния сеанса равен нулю. Этот null эффективно очищает куки из браузера.
вы никогда не должны хранить пароль в виде куки. Чтобы удалить файл cookie, вам просто нужно изменить его и истечь. Вы не можете удалить его, т. е. удалить его с диска пользователя.
вот пример:
HttpCookie aCookie; string cookieName; int limit = Request.Cookies.Count; for (int i=0; i<limit; i++) { cookieName = Request.Cookies[i].Name; aCookie = new HttpCookie(cookieName); aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday Response.Cookies.Add(aCookie); // overwrite it }
принимая заголовок вопроса OP как удаление всех файлов cookie - "удалить файлы cookie на веб-сайте"
я наткнулся на код от Дэйва Домагала в интернете где-то. Я отредактировал Dave, чтобы разрешить куки Google Analytics, которые также прошли через все куки, найденные на веб-сайте, и удалили их все. (С точки зрения разработчика-обновление нового кода на существующий сайт-это приятное прикосновение, чтобы избежать проблем с пользователями, возвращающимися на сайт).
Я использую ниже код в тандеме с сначала прочитайте файлы cookie, удерживая любые необходимые данные , а затем сбросьте файлы cookie после промывки всего чистого с помощью приведенного ниже цикла.
код:
int limit = Request.Cookies.Count; //Get the number of cookies and //use that as the limit. HttpCookie aCookie; //Instantiate a cookie placeholder string cookieName; //Loop through the cookies for(int i = 0; i < limit; i++) { cookieName = Request.Cookies[i].Name; //get the name of the current cookie aCookie = new HttpCookie(cookieName); //create a new cookie with the same // name as the one you're deleting aCookie.Value = ""; //set a blank value to the cookie aCookie.Expires = DateTime.Now.AddDays(-1); //Setting the expiration date //in the past deletes the cookie Response.Cookies.Add(aCookie); //Set the cookie to delete it. }Дополнение: Если Вы Используете Google Analytics
вышеупомянутый цикл / delete удалит все файлы cookie для сайта, поэтому, если вы используете Google Analytics - вероятно, было бы полезно сохранить файл cookie _ _ utmz, поскольку он отслеживает, откуда пришел посетитель, какая поисковая система была использована, какая ссылка была нажата, какое ключевое слово было использовано, а где они были в мире, когда ваш сайт был доступен.
поэтому, чтобы сохранить его, оберните простой оператор if после того, как имя файла cookie известно:
... aCookie = new HttpCookie(cookieName); if (aCookie.Name != "__utmz") { aCookie.Value = ""; //set a blank value to the cookie aCookie.Expires = DateTime.Now.AddDays(-1); HttpContext.Current.Response.Cookies.Add(aCookie); }
хотя это старый поток, я думал, если кто-то все еще ищет решение в будущем.
HttpCookie mycookie = new HttpCookie("aa"); mycookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(mycookie1);вот что сделал трюк для меня.
сейчас 2018 год, так что ASP.NET ядро, есть прямо вперед встроенная функция. Чтобы удалить куки, попробуйте этот код:
if(Request.Cookies["aa"] != null) { Response.Cookies.Delete("aa"); } return View();
Comments