C # / ASP.NET: не удается удалить куки с указанным свойством домена - PullRequest
10 голосов
/ 09 августа 2011

У меня есть следующий код в моем методе входа в систему:

Response.Cookies["cookie"].Value = "...";
Response.Cookies["cookie"].Domain = "domain.com";

Таким образом, cookie помещается в основной домен и все субдомены

Однако, когда я пытаюсь удалить куки:

Response.Cookies["cookie"].Expires = DateTime.Now.AddYears(-1);

Это не работает!

Когда я удаляю 2 строки кода, в которых указано свойство Domain, он работает нормально.

Как я могу решить эту проблему?

Спасибо

Ответы [ 4 ]

28 голосов
/ 14 августа 2011

Хорошо, я понял это.

Когда вы удаляете cookie с установленным свойством Domain, вам нужно установить то же свойство для нового поддельного cookie:

if (Request.Cookies["cookie"] != null)
{
    HttpCookie myCookie = new HttpCookie("cookie");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    myCookie.Domain = "domain.com"; // !!!!
    Response.Cookies.Add(myCookie);
}
4 голосов
/ 12 августа 2011

Я подозреваю, что вы устанавливаете Expires, пока Response находится на поддомене ...Перекрестная проверка: Можете ли вы попробовать установить его из самого домена и посмотреть, работает ли он?

В соответствии с http://msdn.microsoft.com/en-us/library/ms178195%28v=VS.100%29.aspx вы можете удалить файл cookie с помощью:

if (Request.Cookies["cookie"] != null)
{
    HttpCookie myCookie = new HttpCookie("cookie");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}
0 голосов
/ 11 июля 2018

Необходимо указать домен и значение с пустой строкой.Не работает без значения.

        var cookie = new HttpCookie(cookieName, string.Empty)
        {
            Expires = DateTime.Now.AddYears(-1),
            Domain = {YourDomain}
        };

        Response.Cookies.Add(cookie);
0 голосов
/ 02 октября 2012

Немного обыскал и не смог заставить его работать. Я должен был на самом деле установить значение свойства, чтобы оно работало! Использование mvc 3 .net 4.

        var current = HttpContext.Current.Request.Cookies[key];
        if (current == null) return;
        var myCookie = new HttpCookie(key)
                           {
                               Expires = DateTime.Now.AddYears(-1),
                               Value = current.Value,
                               Domain = domain
                           };
        HttpContext.Current.Response.Cookies.Set(myCookie);
...