Как удалить куки на сайте ASP.NET - PullRequest
77 голосов
/ 09 июля 2011

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

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

Ответы [ 10 ]

130 голосов
/ 09 июля 2011

Попробуйте что-то подобное:

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

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

Session.Abandon();

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

43 голосов
/ 09 июля 2011

Нет, куки могут быть очищены только с помощью , для каждого из которых устанавливается дата истечения срока действия .

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 для хранилища идентификатора сеанса, которое по умолчанию) удаляется
26 голосов
/ 25 июля 2014

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

    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();
        }
    }
9 голосов
/ 14 октября 2013

К сожалению, для меня настройка «Истекает» не всегда работает.Файл cookie не был затронут.

Этот код работал для меня:

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

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

4 голосов
/ 03 апреля 2014

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

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

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

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

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

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

3 голосов
/ 06 ноября 2013

Вы никогда не должны хранить пароль в виде куки.Чтобы удалить куки, вам действительно нужно изменить и истечь срок его действия.Вы не можете действительно удалить его, то есть удалить его с диска пользователя.

Вот образец:

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
    }
2 голосов
/ 08 февраля 2014

Принимая заголовок вопроса ОП как удаление всех файлов cookie - «Удалить файлы cookie на веб-сайте»

Я где-то встречал код от Дейва Домагала в Интернете.Я отредактировал файлы Dave, чтобы разрешить использование файлов 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);    
}
1 голос
/ 10 сентября 2018

Сейчас 2018 год, поэтому в ASP.NET Core есть встроенная функция.Чтобы удалить куки, попробуйте этот код:

if(Request.Cookies["aa"] != null)
{
    Response.Cookies.Delete("aa");
}
return View();
1 голос
/ 05 июля 2017

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

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

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

0 голосов
/ 02 июля 2018

Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)

...