2013-08-30 5 views
8

Я пытался определить, существует печенье и, если он истек с этим кодом:Как лучше проверить, существует ли файл cookie?

if(HttpContext.Current.Response.Cookies["CookieName"]){ 
    Do stuff; 
} 

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

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

if (context.Response.Cookies.AllKeys.Contains("CookieName")) 
     { 
      Do stuff; 
     } 

Это не кажется оптимальным, и я считаю,Странно, что моя первоначальная попытка создала файл cookie. У кого-нибудь есть хорошее объяснение для печенья?

ответ

16

Вы используете Response.Cookies. Это неправильно - это файлы cookie, которые отправляются BACK в браузер.

Чтобы прочитать существующие куки, вы должны смотреть на Request.Cookies:

if (context.Request.Cookies["CookieName"] != null) 
{ 
    //Do stuff; 
} 
+0

Мы имели функцию, которая создала печенье после нажатия на кнопку. Затем мы хотели проверить наличие этого файла cookie во время Page_PreRender. К тому времени cookie еще не находится в запросе, так как мы не отправили ответ с новым файлом cookie. Поэтому мы создали свойство, которое сначала искало файл cookie в Response, а затем, если там ничего не было, в запросе. – Cammy

+1

Что было действительно запутанным, так это то, что первый if-block, который я использовал, всегда возвращал cookie (иногда пустой, поскольку попытка получить несуществующий файл cookie из Response автоматически создаст его). – Cammy

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