На моем веб-сайте, когда пользователь нажимает кнопку «Выход», страница Logout.aspx загружается с кодом Session.Clear()
.
В ASP.NET/C# удаляются ли все файлы cookie? Или нужно добавить какой-либо другой код для удаления всех файлов cookie с моего веб-сайта?
Session.Abandon
очистит cookie сеанса ASP.NET, но не файлы cookie, которые вы установили вручную, например userID здесь. ИCookies["whatever"]
никогда не бывает нулевым; фреймворк создаст файл cookie, если вы запросите несуществующий.Cookies["whatever"]
возвращает null, если cookie не существует! Я знаю, что это старый комментарий, но я не хочу, чтобы другие читатели были введены в заблуждение этим комментарием.Expires
НЕ установлено значение, такDateTime.MinValue
как это фактически приведет к истечению срока действия cookie для файла cookie, что означает, что он ждет, пока браузер / вкладка (зависит от браузера), прежде чем удалить cookie.Нет, файлы cookie можно очистить, только установив дату истечения срока действия для каждого из них.
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
события:источник
if
линия на самом деле не работает. Когда вы запрашиваете файл cookie,Cookies["whatever"]
фреймворк создает файл cookie, если он не существует.Request
объект.Response
объекта. Интересно :)Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1)
. Здесь сервер запросит у браузера удаление cookie. Браузер удалит его, если он существует.Вот что я использую:
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(); } }
источник
К сожалению, для меня установка «Истекает» не всегда работала. На файл cookie это не повлияло.
Этот код работал у меня:
HttpContext.Current.Session.Abandon(); HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
где
"ASP.NET_SessionId"
имя файла cookie. На самом деле это не удаляет файл cookie, но заменяет его пустым файлом cookie, который был для меня достаточно близок.источник
Я просто хочу указать, что файл cookie идентификатора сеанса не удаляется при использовании Session.Abandon, как говорили другие.
http://support.microsoft.com/kb/899918
источник
Сейчас 2018 год, поэтому в ASP.NET Core есть простая встроенная функция. Чтобы удалить cookie, попробуйте этот код:
if(Request.Cookies["aa"] != null) { Response.Cookies.Delete("aa"); } return View();
источник
Никогда не следует хранить пароль в виде файлов cookie. Чтобы удалить файл 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 }
источник
Принимая заголовок вопроса ОП как удаление всех файлов cookie - «Удалить файлы cookie на веб-сайте»
Где-то в сети я наткнулся на код Дэйва Домагала. Я отредактировал Dave's, чтобы разрешить использование файлов cookie Google Analytics, которые перебирали все файлы cookie, найденные на сайте, и удаляли их все. (С точки зрения разработчика - обновление нового кода на существующем сайте - приятный прием, позволяющий избежать проблем с повторным посещением сайта пользователями).
Я использую приведенный ниже код в тандеме с чтением файлов 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
Вышеупомянутый цикл / удаление удалит ВСЕ файлы 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);
Это то, что помогло мне.
источник
Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)
источник
Вы должны установить дату истечения срока, чтобы удалить куки
Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));
Это не вызовет исключения, если файл cookie не существует.
источник