Ответ 1
Попробуйте что-то вроде этого:
if (Request.Cookies["userId"] != null)
{
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);
}
Но также имеет смысл использовать
Session.Abandon();
кроме того, во многих сценариях.
На моем веб-сайте, когда пользователь нажимает кнопку "Выход", страница Logout.aspx загружается с кодом Session.Clear()
.
В ASP.NET/C# это очищает все файлы cookie? Или есть ли какой-либо другой код, который необходимо добавить для удаления всех файлов cookie моего веб-сайта?
Попробуйте что-то вроде этого:
if (Request.Cookies["userId"] != null)
{
Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);
}
Но также имеет смысл использовать
Session.Abandon();
кроме того, во многих сценариях.
Нет, Cookies могут быть очищены только установкой даты истечения для каждого из них.
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
событие:
Это то, что я использую:
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 cookieName = cookie.Name;
var expiredCookie = new HttpCookie(cookieName) {Expires = DateTime.Now.AddDays(-1)};
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 Session ID не удаляется при использовании Session.Abandon, как говорили другие.
Когда вы отказываетесь от сеанса, cookie идентификатора сеанса не удаляется из браузера пользователя. Поэтому, как только сессия была заброшенные, любые новые запросы к одному и тому же приложению будут использовать те же самые идентификатор сеанса, но будет иметь новый экземпляр состояния сеанса. В то же время, если пользователь открывает другое приложение в пределах одного и того же DNS домена, пользователь не потеряет свое состояние сеанса после Abandon метод вызывается из одного приложения.
Иногда вам может не потребоваться повторное использование идентификатора сеанса. Если вы это сделаете, и если вы понимаете последствия не повторного использования идентификатора сеанса, использования следующий пример кода, чтобы отказаться от сеанса и очистить cookie сеансового идентификатора:
Session.Abandon(); Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
Этот пример кода очищает состояние сеанса от сервера и устанавливает cookie состояния сеанса до нуля. Нулевое значение эффективно очищается cookie из браузера.
Вы никогда не должны хранить пароль в качестве файла 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
}
Взятие названия вопроса 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);
Вот что помогло.