2012-12-06 13 views
7

Próbuję usunąć plik cookie, ale nie zostanie on usunięty. Oto kod, którego próbuję użyć.Usuń problem z plikiem cookie w języku C#

if (Request.Cookies["dcart"] != null) 
{ 
    Response.Write(Request.Cookies["dcart"].Expires); 
    // Response 1/1/0001 12:00:00 AM 

    Response.Write(Request.Cookies["dcart"].Value); 
    // Response 229884 

    HttpCookie myCookie = new HttpCookie("dcart"); 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    myCookie.Value = ""; 
    Response.Cookies.Add(myCookie); 
} 

Response.Write(Request.Cookies["dcart"].Expires); 
// Response 1/1/0001 12:00:00 AM 
Response.Write(Request.Cookies["dcart"].Value); 
// Response 229884 

Po ponownym pobraniu pliku cookie nic się nie zmienia. Sprawdzam w/FireFox i Chrome to samo zachowanie. Interesujące jest to, że data wygaśnięcia wyświetla się poprawnie w przeglądarkach, ale w kodzie.

Próbowałem pójść w ślady i nie działałem.

  • Ustaw datę wygaśnięcia na (jutro) i ponownie ustaw ją na wczoraj.
  • uruchom ponownie przeglądarkę (dzieje różnych przeglądarek i ludzi)
  • ustawić wartość czegoś
  • Używaj HttpContext.Current.Request.Cookies [ "dcart"] ....
  • Request.Cookies [ "dcart" ] .Expires = DateTime.Now.AddYears (-10);

PS. Kod nie będzie działać bezpośrednio na twoim komputerze, ponieważ nie masz tego pliku cookie.

+0

Użyj Fiddlera (lub dowolnego innego debuggera HTTP) i sprawdź, czy plik cookie jest rzeczywiście wysyłany. To znaczy. może być połączenie, aby usunąć wszystkie ciasteczka z odpowiedzi przed wysłaniem ... –

+0

@DaveZych Request.Cookies ["dcart"]. Expires = DateTime.Now.AddYears (-10); nie działa. – asr

Odpowiedz

3

ROZWIĄZANIA

problemem jest ścieżką. Plik cookie, o który prosiłem, był pod ścieżką "/ store", a ścieżka informacji o pierwszej odpowiedzi do "/".

if (Request.Cookies["dcart"] != null) 
{ 
    HttpCookie myCookie = new HttpCookie("dcart"); 
    myCookie.Expires = DateTime.Now.AddDays(-1d); 
    myCookie.Path = "/store"; 
    Response.Cookies.Add(myCookie); 
} 

Po dodaniu informacji o ścieżce jest ona usuwana.

Uwaga: użyłem Firebug do śledzenia ścieżki pliku cookie.

+0

w chrome ścieżka do plików cookie można łatwo znaleźć pod chrome: // settings/cookies – Tomek

0

Pliki cookie są trudniejsze, niż wyglądają. Przeczytaj to za jasny opis jak korzystać z plików cookie:

On The Care and Handling of Cookies

Aby usunąć plik cookie, zgodnie z połączonej artykuł trzeba po prostu ustawić czas ważności na dowolnym momencie w przeszłości, ale nie używać DateTime.MinValue ponieważ niektóre przeglądarki nie obsługują tę datę poprawnie:

Jeśli chcesz usunąć plik cookie na komputerze klienckim, nie wolno używać oczywistą Response.Cookies.Remove („MyCookie”), który po prostu mówi ciasteczko , aby nie nadpisywać pliku cookie klienta (zobacz poniżej, aby uzyskać więcej informacji na temat szczegółowe wyjaśnienie), ustaw właściwość Expires ciasteczka na zawsze przed przed bieżącym czasem. To powie klientowi, aby nadpisał bieżący plik cookie z wygasłym plikiem cookie, a klient nigdy nie wyśle ​​go z powrotem na serwer.

Ponownie, pokusą jest użycie DateTime.MinValue (01-Jan-0001 00:00:00) w celu usunięcia pliku cookie; znowu byłby to błąd. W tym czasie Netscape 7 będzie działał zgodnie z oczekiwaniami, ale Internet Explorer 6 uważa to za wyjątkowy przypadek. Jeśli przeglądarka Internet Explorer otrzyma plik cookie z datą ważności "pustą", to zachowa plik cookie do momentu zamknięcia przeglądarki, a następnie wygaśnie.

Najbezpieczniejszym (i najbardziej symetryczny) sposób, aby usunąć plik cookie za pomocą datę upływie DateTime.Now.AddYears (-30).

czyli prawidłowy sposób jest

Request.Cookies["dcart"].Expires = DateTime.Now.AddYears(-30); 
0

Ten link będzie podać kilka odpowiedzi dla Ciebie:

https://msdn.microsoft.com/en-us/library/ms178195.aspx

W moim przypadku, po prostu pracował w localhost, ale kiedy wdrożony na serwerze problem utrzymywały ...

W HttpCookie, możesz spróbować ustawić parametr Expire DateTime.Now.AddDays(-1d), (Ustaw datę ważności na wczoraj) i ustawić właściwość Secure = false.

Po tym, pracował dla mnie.