2013-08-30 20 views
8

starałem się ustalić, czy ciasteczko istniał i jeżeli upłynął z tym kodem:Jak najlepiej sprawdzić, czy plik cookie istnieje?

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

Jednak po długich godzinach łez i potu zauważyłem, że ta linia została faktycznie tworząc pusty plik cookie lub zastąpieniem istniejących cookies, a jej wartość będzie pusty, a wygasa w 0.

i rozwiązać ten wykonując przeczytaniu wszystkich plików cookie i patrząc na mecz takiego zamiast

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

to nie wydaje optymalna, a znajdę dziwne, że moja pierwsza próba stworzyła plik cookie. Czy ktoś ma dobre wytłumaczenie dla cookie?

Odpowiedz

16

Używasz Response.Cookies. To źle - są to pliki cookie, które są wysyłane z powrotem do przeglądarki.

Aby odczytać istniejące pliki cookie, trzeba spojrzeć na Request.Cookies:

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

Mieliśmy funkcję, która utworzyła cookie po kliknięciu przycisku. Następnie chcieliśmy sprawdzić istnienie tego pliku cookie podczas Page_PreRender. Do tego czasu plik cookie nie jest jeszcze dostępny, ponieważ nie wysłaliśmy odpowiedzi z nowym plikiem cookie. Dlatego stworzyliśmy własność, która najpierw szukała ciasteczka w Odpowiedzi, a następnie, jeśli nic tam nie było, w Żądaniu. – Cammy

+1

To, co było naprawdę mylące, to to, że pierwszy blok, którego używałem, zawsze zwracał plik cookie (czasami pusty, ponieważ próba pobrania nieistniejącego pliku cookie z odpowiedzi spowoduje jego automatyczne utworzenie). – Cammy

Powiązane problemy