Удаление файла cookie и отказ от сеанса не удаляет файл cookie.

Я создал файл cookie в своем приложении C# WebForms, которое я тестирую в IE10 в 64-разрядной версии Windows 7.

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

У меня есть всплывающее окно, которое в ответ на нажатие пользователем кнопки ok будет делать:

String key = "mycookiedata";
HttpCookie oCookie = null;
if (null != HttpContext.Current.Request.Cookies[key])
{
    oCookie = HttpContext.Current.Request.Cookies[key];

    oCookie.Expires = DateTime.Now.AddDays(-1);
    HttpContext.Current.Response.Cookies.Set(oCookie);
}

Session.Remove(key);
Session.Abandon();
Session.Clear();

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

Я что-то пропустил в коде?


person Sarah Weinberger    schedule 08.10.2013    source источник
comment
Вы должны использовать Fiddler и проверять запрос/ответ. Может случиться так, что, хотя файл cookie удаляется при ответе, он может быть воссоздан при обратной передаче (GET). Кроме того, вы выполняете полную обратную передачу или просто обновление AJAX?   -  person Superzadeh    schedule 08.10.2013
comment
cahmadzadeh, я не знаю ответа на ваш вопрос. Обработка кнопки «ОК» происходит в ответ на вызов метода панели обратного вызова DevExpress, cpdialog.PerformCallback(). Это делает пост назад, но я не знаю типа. Подозреваю обновление Ajax. Не думаю, что когда-либо слышал о Fiddler, так что обязательно посмотрю. Спасибо.   -  person Sarah Weinberger    schedule 08.10.2013
comment
Я думал, что видел комментарий, но не могу найти его о том, что мой вызов сеанса является запросом, а не ответом. Это может быть. Я попытался добавить это как мысль, чтобы избавиться от файла cookie. Это не сработало. Это стоило попробовать. Я расследую воссоздание файла cookie. К сожалению, я не могу использовать отладчик в Visual Studio, потому что файл cookie работает с доменом, а не с локальным объектом, но я могу получить поток из Visual Studio.   -  person Sarah Weinberger    schedule 08.10.2013
comment
Ну, вы должны сделать ПОЛНУЮ обратную передачу (страница должна перезагрузиться), иначе cookie не будет фактически установлен (и, следовательно, он не истечет и не будет удален).   -  person Superzadeh    schedule 08.10.2013
comment
cahmadzadeh, мне нужно связаться с DevExpress и узнать, получу ли я полный постбэк или нет. С другой стороны, я удалил свои временные вызовы Session, так как это ничего не дало.   -  person Sarah Weinberger    schedule 08.10.2013
comment
Вам не нужно связываться с ними, просто посмотрите на страницу, когда вы нажмете кнопку. Перезагружается ли он полностью (= полная обратная передача) или нет (= ajax-обратная передача, частичное обновление или асинхронная обратная передача)   -  person Superzadeh    schedule 08.10.2013


Ответы (2)


You cannot directly delete a cookie on a user's computer. 

Однако вы можете указать браузеру пользователя удалить файл cookie, установив дату истечения срока действия файла cookie на прошлую дату.

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

Проверьте это Удалить файл cookie из MSDN< /а>

Все, что вы можете сделать, это сделать так, чтобы срок действия файла cookie истек, установив прошедшее время

Код ниже сделает это

if (Request.Cookies[key] != null)
{
    HttpCookie myCookie = new HttpCookie(key);
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}
person Murali Murugesan    schedule 08.10.2013
comment
@cahmadzadeh, You cannot directly delete a cookie on a user's computer для этого утверждения я дал ссылку, и все, что она делает, правильно. - person Murali Murugesan; 08.10.2013
comment
Как сказал Чахмадзаде, я удалил куки должным образом. Сессионные вызовы были просто мыслью, добавленной сейчас около получаса назад и в итоге удаленной. Тем не менее, второе предложение в ссылке, которую дал Мурали, кажется интересным. Интересно, что можно квалифицировать как просьбу. Вот это предложение: «В следующий раз, когда пользователь сделает запрос на страницу в пределах домена или пути, на котором установлен файл cookie, браузер определит, что срок действия файла cookie истек, и удалит его. - person Sarah Weinberger; 08.10.2013
comment
@SarahWeinberger, спасибо за указание на это предложение. Я добавил со своим ответом - person Murali Murugesan; 08.10.2013
comment
Страница НЕ перезагружается. Чахмедзаде спросил, так это или нет. Отмена имеет AutoPostBack = False, но я удалил этот атрибут, значение по умолчанию равно true, из кнопки «ОК», но по-прежнему не отправил обратно. - person Sarah Weinberger; 08.10.2013
comment
Добавление вызова PerformPostBack() после закрытия диалогового окна выхода, который затем, в свою очередь, выполняет Response.Redirect(/, false); звоните, не работает. Я все еще в системе. Расстраивает. - person Sarah Weinberger; 08.10.2013

Запрос страницы, как в первом ответе, не сработал. Пробовал несколько вариантов и нада.

Я наконец обдумал ответ. В моем событии JavaScript EndCallback для панели обратного вызова DevExpress для кнопки ok в диалоговом окне выхода из системы я реализовал вызов функции JavaScript, Delete_Cookie. Использование JavaScript для удаления файла cookie сработало!

В исходном коде было два изменения, либо одно, либо оба могли помочь.

  1. Удалите файл cookie с клиента, а не код C#.
  2. Код Delete_Cookie устанавливает дату истечения срока действия не на текущую дату за вычетом единицы (1), а скорее на дату в 1970 году. Я подозреваю, что дата 1970 года сделала свое дело.

Вот ссылка на статью, чей код Delete_Cookie я использовал.

person Sarah Weinberger    schedule 08.10.2013
comment
Однако будьте осторожны, если этот файл cookie необходимо удалить в целях безопасности, это может привести к огромной уязвимости на стороне клиента (поскольку код JavaScript можно легко отключить). - person Superzadeh; 09.10.2013