it-swarm.com.ru

Как удалить куки на сайте ASP.NET

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

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

73
lock

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

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

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

Session.Abandon();

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

125
Kirill

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

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 для хранилища идентификатора сеанса, которое по умолчанию) удаляется
42
VMAtm

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

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

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

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

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

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

8
Buh Buh

Я просто хочу отметить, что 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

4
MTs

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

Вот образец:

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
Rajamohan Anguchamy

Принимая заголовок вопроса ОП как удаление всех файлов 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);    
}
2
Martin Sansone - MiOEE

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

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

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

1
Ahsan

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

if(Request.Cookies["aa"] != null)
{
    Response.Cookies.Delete("aa");
}
return View();
0
Said Al Souti

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

0
Noman Chali