W mojej witrynie, gdy użytkownik kliknie przycisk „Wyloguj”, strona Logout.aspx ładuje się z kodem Session.Clear()
.
Czy w ASP.NET/C# powoduje to wyczyszczenie wszystkich plików cookie? Czy jest jakiś inny kod, który należy dodać, aby usunąć wszystkie pliki cookie z mojej witryny?
Session.Abandon
wyczyści plik cookie sesji ASP.NET, ale nie pliki cookie ustawione ręcznie, takie jak identyfikator użytkownika tutaj. ICookies["whatever"]
nigdy nie jest nieważne; framework utworzy plik cookie, jeśli poprosisz o nieistniejący plik.Cookies["whatever"]
zwraca wartość null, gdy plik cookie nie istnieje! Wiem, że to stary komentarz, ale nie chcę, aby inni czytelnicy byli wprowadzani w błąd przez ten komentarz.Expires
jest również, aby NIE ustawić tego na,DateTime.MinValue
ponieważ w rzeczywistości spowoduje to wygaśnięcie sesji cookie, co oznacza, że czeka, aż przeglądarka / karta (zależna od przeglądarki) zostanie zamknięta przed usunięciem pliku cookie.Nie, pliki cookie można wyczyścić tylko poprzez ustawienie daty ważności dla każdego z nich.
if (Request.Cookies["UserSettings"] != null) { HttpCookie myCookie = new HttpCookie("UserSettings"); myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); }
W chwili obecnej
Session.Clear()
:Session
kolekcji są usuwane.Session_End
wydarzenie się nie wydarzyło.Jeśli korzystasz z tej metody podczas wylogowania, powinieneś również użyć
Session.Abandon
metody doSession_End
zdarzenia:źródło
if
linia tak naprawdę nie działa. Kiedy poprosisz o plik cookie zCookies["whatever"]
frameworkiem, utworzy plik cookie, jeśli nie istnieje.Request
obiekt.Response
obiektu. Ciekawe :)Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1)
. Tutaj serwer zażąda od przeglądarki usunięcia plików cookie. Przeglądarka usunie go, jeśli istnieje.Oto czego używam:
private void ExpireAllCookies() { if (HttpContext.Current != null) { int cookieCount = HttpContext.Current.Request.Cookies.Count; for (var i = 0; i < cookieCount; i++) { var cookie = HttpContext.Current.Request.Cookies[i]; if (cookie != null) { var expiredCookie = new HttpCookie(cookie.Name) { Expires = DateTime.Now.AddDays(-1), Domain = cookie.Domain }; HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it } } // clear cookies server side HttpContext.Current.Request.Cookies.Clear(); } }
źródło
Niestety dla mnie ustawienie „Expires” nie zawsze działało. Plik cookie pozostał nienaruszony.
Ten kod zadziałał dla mnie:
HttpContext.Current.Session.Abandon(); HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
gdzie
"ASP.NET_SessionId"
jest nazwa pliku cookie. To tak naprawdę nie usuwa pliku cookie, ale zastępuje go pustym plikiem cookie, który był dla mnie wystarczająco blisko.źródło
Chcę tylko zaznaczyć, że plik cookie identyfikatora sesji nie jest usuwany podczas korzystania z Session.Abandon, jak powiedzieli inni.
http://support.microsoft.com/kb/899918
źródło
Teraz jest rok 2018, więc w ASP.NET Core jest wbudowana prosta funkcja. Aby usunąć plik cookie, wypróbuj ten kod:
if(Request.Cookies["aa"] != null) { Response.Cookies.Delete("aa"); } return View();
źródło
Nigdy nie należy przechowywać hasła jako pliku cookie. Aby usunąć plik cookie, naprawdę wystarczy go zmodyfikować i wygaśnąć. Tak naprawdę nie można go usunąć, tj. Usunąć go z dysku użytkownika.
Oto próbka:
HttpCookie aCookie; string cookieName; int limit = Request.Cookies.Count; for (int i=0; i<limit; i++) { cookieName = Request.Cookies[i].Name; aCookie = new HttpCookie(cookieName); aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday Response.Cookies.Add(aCookie); // overwrite it }
źródło
Biorąc tytuł pytania OP jako usunięcie wszystkich plików cookie - „Usuń pliki cookie ze strony internetowej”
Gdzieś w sieci natknąłem się na kod od Dave'a Domagali. Edytowałem Dave'a, aby zezwolić również na pliki cookie Google Analytics - które zapętlały wszystkie pliki cookie znalezione w witrynie i usuwały je wszystkie. (Z punktu widzenia programisty - aktualizacja nowego kodu do istniejącej witryny jest miłym akcentem, aby uniknąć problemów z ponownym odwiedzaniem witryny przez użytkowników).
Poniższy kod używam w tandemie z najpierw odczytywaniem ciasteczek, trzymaniem wszelkich wymaganych danych - a następnie resetowaniem ciasteczek po wyczyszczeniu wszystkiego za pomocą poniższej pętli.
Kod:
int limit = Request.Cookies.Count; //Get the number of cookies and //use that as the limit. HttpCookie aCookie; //Instantiate a cookie placeholder string cookieName; //Loop through the cookies for(int i = 0; i < limit; i++) { cookieName = Request.Cookies[i].Name; //get the name of the current cookie aCookie = new HttpCookie(cookieName); //create a new cookie with the same // name as the one you're deleting aCookie.Value = ""; //set a blank value to the cookie aCookie.Expires = DateTime.Now.AddDays(-1); //Setting the expiration date //in the past deletes the cookie Response.Cookies.Add(aCookie); //Set the cookie to delete it. }
Dodatek: jeśli korzystasz z Google Analytics
Powyższe zapętlenie / usunięcie spowoduje usunięcie WSZYSTKICH ciasteczek ze strony, więc jeśli korzystasz z Google Analytics - prawdopodobnie przydałoby się zachować plik cookie __utmz, ponieważ ten śledzi, skąd przybył odwiedzający, z jakiej wyszukiwarki korzystała, co kliknięto łącze, jakie słowo kluczowe zostało użyte i gdzie się znajdowały na świecie, kiedy uzyskano dostęp do Twojej witryny.
Aby to zachować, zawiń proste oświadczenie if, gdy znana będzie nazwa pliku cookie:
... aCookie = new HttpCookie(cookieName); if (aCookie.Name != "__utmz") { aCookie.Value = ""; //set a blank value to the cookie aCookie.Expires = DateTime.Now.AddDays(-1); HttpContext.Current.Response.Cookies.Add(aCookie); }
źródło
Chociaż to stary wątek, pomyślałem, że jeśli ktoś nadal szuka rozwiązania w przyszłości.
HttpCookie mycookie = new HttpCookie("aa"); mycookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(mycookie1);
To właśnie pomogło mi.
źródło
Response.Cookies ["UserSettings"]. Expires = DateTime.Now.AddDays (-1)
źródło
Aby usunąć pliki cookie, musisz ustawić datę wygaśnięcia
Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));
Nie spowoduje to zgłoszenia wyjątku, jeśli plik cookie nie istnieje.
źródło