2013-10-08 4 views
1

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

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

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

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 исчез.

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

+0

Вы должны использовать Fiddler и проверять запрос/ответ. Возможно, что, хотя cookie удаляется в ответ, его можно было бы создать заново (GET). Также вы делаете полный ответ или просто обновление AJAX? – CharlesAD

+0

cahmadzadeh, я не знаю ответа на ваш вопрос. Обработка OK'а в ответ на вызов метода панели обратного вызова DevExpress, cpdialog.PerformCallback(). Это делает сообщение назад, но я не знаю тип. Я подозреваю, что обновление Ajax. Я не думаю, что я когда-либо слышал о Fiddler, поэтому я обязательно это проверю. Благодарю. –

+0

Я думал, что видел комментарий, но не могу найти его о том, что мой сеансовый вызов - это запрос, а не ответ. Это может быть. Я попытался добавить это как мысль, чтобы избавиться от файла cookie. Это не сработало. Это стоило попробовать. Я исследую рекреацию печенья. К сожалению, я не могу использовать отладчик в Visual Studio, потому что cookie работает на домене, а не на локальном объекте, но я могу получить поток от Visual Studio. –

ответ

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

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

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

Проверить это Delete a Cookie from MSDN

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

Код ниже будет делать

if (Request.Cookies[key] != null) 
{ 
    HttpCookie myCookie = new HttpCookie(key); 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    Response.Cookies.Add(myCookie); 
} 
+0

Это именно то, что она делает. спасибо - Cpt Очевидно. – CharlesAD

+0

@cahmadzadeh, 'Вы не можете напрямую удалить cookie на компьютере пользователя' для этого утверждения, которое я дал ссылку, и что она делает, является правильной. –

+0

Как сказал Кахмадзаде, я действительно удалял cookie. Сессионные звонки были просто мыслью, добавленной сейчас около получаса назад, и она была удалена. Тем не менее, второе предложение в ссылке, которую дал Мурали, кажется интересным. Интересно, что будет квалифицироваться как «запрос». Вот это предложение: «В следующий раз, когда пользователь сделает запрос на страницу в домене или пути, задающем куки-файл, браузер определит, что файл cookie истек». –

0

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

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

Было два изменения от кода позади, либо один, либо оба могли быть тем, что было трюком.

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

link описание товара, в котором используется код Delete_Cookie.

+0

Будьте осторожны, если этот файл cookie должен быть удален для целей безопасности, выполнение его клиентской стороны - огромная уязвимость (так как код JavaScript можно легко отключить). – CharlesAD

Смежные вопросы