Почему я не могу удалить этот файл cookie? - PullRequest
8 голосов
/ 11 сентября 2008

Хорошо, вот 411 - у меня есть следующий обработчик событий в моем файле Global.asax.cs:

private void Global_PostRequestHandlerExecute(object sender, EventArgs e)
{
   if (/* logic that determines that this is an ajax call */)
   {
      // we want to set a cookie
      Response.Cookies.Add(new HttpCookie("MyCookie", "true"));
   }
}

Этот обработчик будет работать во время запросов Ajax (в результате использования инфраструктуры Ajax, которую я использую), а также в других случаях - условие оператора if отфильтровывает не-Ajax-события и работает просто отлично (это не так. здесь не уместно, поэтому я для краткости не включил его).

Достаточно сказать, что это работает просто отлично - файл cookie установлен, я могу прочитать его на клиенте, и все хорошо до этого момента.

Теперь о той части, которая сводит меня с ума.

Вот функция JavaScript, которую я использую для удаления куки:

function deleteCookie(name) {
   var cookieDate = new Date();
   cookieDate.setTime(cookieDate.getTime() - 1);
   document.cookie = (name + "=; expires=" + cookieDate.toGMTString());
}

Так что, конечно, в какой-то момент после установки cookie я удаляю его так:

deleteCookie("MyCookie");

Только это не делает работу; печенье все еще существует. Итак, кто-нибудь знает почему?

Ответы [ 8 ]

9 голосов
/ 02 октября 2008

Вы должны удалить свой cookie по тому же пути, где вы его создали. поэтому создайте свой cookie с помощью пути = / и также добавьте его с путем = / ..

4 голосов
/ 11 сентября 2008
  • Проверяли ли вы домены и пути файлов cookie на стороне клиента и на сервере, чтобы убедиться, что они совпадают?
  • Один файл cookie безопасен, а другой нет?
  • Кроме этого, я бы заподозрил проблемы синхронизации сервера / клиента, как предполагает Эрленд.
2 голосов
/ 11 сентября 2008

Я опубликовал файл cookie js неделю назад или около того на моем блоге . Это сработало для меня во всех браузерах "A Grade".

var CookieUtil = {
  createCookie:function(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
  },
  readCookie:function(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
  },
  eraseCookie:function(name) {
    createCookie(name,"",-1);
  }
};
2 голосов
/ 11 сентября 2008

Странно .. Код, который вы вставили, почти дословно звучит так: http://www.quirksmode.org/js/cookies.html, который отлично работает ..

Я знаю, что вы используете Ajax, но пытались ли вы быстро перенести его в код на стороне сервера, чтобы проверить, работает ли он ? Это может помочь выяснить, если это проблема с JS или что-то еще (например, блокировка тайного файла в куки)?

Обновление

Только что был быстрый Google, похоже, что могут быть проблемы с настройками браузера. Я не думаю, что ваша проблема в коде здесь, скорее всего, что-то еще. Я предложил бы попробовать вышеупомянутое как PoC, и мы можем двигаться оттуда. :)

2 голосов
/ 11 сентября 2008

Вы пытались использовать "; expires = Четверг, 01 января 1970 г. 00:00:01 GMT"?

1 голос
/ 15 сентября 2010

Также, если во время создания был указан домен cookie, я обнаружил, что вы также должны указать домен cookie при попытке удалить (истечь) его.

0 голосов
/ 02 октября 2008

Я предполагаю, что вы вызываете этот javascript на стороне браузера. Какой браузер вы используете, как вы просматриваете куки, чтобы убедиться, что они все еще там?

0 голосов
/ 13 сентября 2008

Мы уверены, что нет кода, который устанавливает Cookie в HttpOnly (мы ничего не пропустили выше)? Свойство HttpOnly не позволяет (современным) браузерам изменять cookie. Мне было бы интересно узнать, сможете ли вы убить его на стороне сервера, как предлагает Роб.

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