Как удалить файлы cookie на веб-сайте ASP.NET

На моем веб-сайте, когда пользователь нажимает кнопку "Выход", страница Logout.aspx загружается с кодом Session.Clear().

В ASP.NET/C# это очищает все файлы cookie? Или есть ли какой-либо другой код, который необходимо добавить для удаления всех файлов cookie моего веб-сайта?

Ответ 1

Попробуйте что-то вроде этого:

if (Request.Cookies["userId"] != null)
{
    Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);   
}

Но также имеет смысл использовать

Session.Abandon();

кроме того, во многих сценариях.

Ответ 2

Нет, 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 событие:

  • Cookie с идентификатором сеанса (если ваше приложение использует файлы cookie для хранилища идентификаторов сеансов, которое по умолчанию) удаляется

Ответ 3

Это то, что я использую:

    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();
        }
    }

Ответ 4

К сожалению, для меня установка "Expires" не всегда срабатывала. Печенье не пострадало.

Этот код действительно работал у меня:

HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

где "ASP.NET_SessionId" - имя файла cookie. Это на самом деле не удаляет файл cookie, но переопределяет его пустым файлом cookie, который был достаточно близко для меня.

Ответ 5

Я просто хочу указать, что cookie Session ID не удаляется при использовании Session.Abandon, как говорили другие.

Когда вы отказываетесь от сеанса, cookie идентификатора сеанса не удаляется из браузера пользователя. Поэтому, как только сессия была заброшенные, любые новые запросы к одному и тому же приложению будут использовать те же самые идентификатор сеанса, но будет иметь новый экземпляр состояния сеанса. В то же время, если пользователь открывает другое приложение в пределах одного и того же DNS домена, пользователь не потеряет свое состояние сеанса после Abandon метод вызывается из одного приложения.

Иногда вам может не потребоваться повторное использование идентификатора сеанса. Если вы это сделаете, и если вы понимаете последствия не повторного использования идентификатора сеанса, использования следующий пример кода, чтобы отказаться от сеанса и очистить cookie сеансового идентификатора:

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

Этот пример кода очищает состояние сеанса от сервера и устанавливает cookie состояния сеанса до нуля. Нулевое значение эффективно очищается cookie из браузера.

http://support.microsoft.com/kb/899918

Ответ 6

Вы никогда не должны хранить пароль в качестве файла 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
    }

Ответ 7

Взятие названия вопроса 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);    
}

Ответ 8

Хотя это старый поток, я подумал, что если кто-то все еще ищет решение в будущем.

HttpCookie mycookie = new HttpCookie("aa");
mycookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(mycookie1);

Вот что помогло.