Jak mogę wykryć na serwerze (po stronie serwera), czy pliki cookie w przeglądarce są wyłączone? Czy to możliwe?
Szczegółowe wyjaśnienie: przetwarzam żądanie HTTP na serwerze. Chcę ustawić plik cookie za pomocą Set-Cookie
nagłówka. W tym momencie muszę wiedzieć, czy plik cookie zostanie ustawiony przez przeglądarkę klienta, czy też moje żądanie ustawienia pliku cookie zostanie zignorowane.
http
cookies
server-side
Alexander Yanovets
źródło
źródło
Odpowiedzi:
Wyślij odpowiedź przekierowania z ustawionym plikiem cookie; podczas przetwarzania (specjalnego) testu przekierowanego adresu URL dla pliku cookie - jeśli jest, przekieruj do normalnego przetwarzania, w przeciwnym razie przekieruj do stanu błędu.
Pamiętaj, że może to tylko powiedzieć, że przeglądarka zezwoliła na ustawienie pliku cookie, ale nie na jak długo. Mój FF pozwala mi na wymuszenie wszystkich plików cookie w trybie „sesji”, chyba że witryna jest specjalnie dodana do listy wyjątków - takie pliki cookie zostaną odrzucone, gdy FF wyłączy się, niezależnie od wygaśnięcia określonego serwera. I to jest tryb, w którym zawsze uruchamiam FF.
źródło
Aby to osiągnąć, możesz użyć Javascript
Biblioteka:
function createCookie(name, value, days) { var expires; if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toGMTString(); } else expires = ""; document.cookie = name + "=" + value + expires + "; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); } return null; } function eraseCookie(name) { createCookie(name, "", -1); } function areCookiesEnabled() { var r = false; createCookie("testing", "Hello", 1); if (readCookie("testing") != null) { r = true; eraseCookie("testing"); } return r; }
Kod do uruchomienia:
Zapamiętaj
Działa to tylko wtedy, gdy włączony jest Javascript!
źródło
Nie sądzę, aby można było bezpośrednio sprawdzić. Najlepszym sposobem jest przechowywanie wartości w pliku cookie i próba ich odczytania i zdecydowania, czy pliki cookie są włączone, czy nie.
źródło
Typowym sposobem sprawdzenia obsługi plików cookie jest przekierowanie.
Warto to zrobić tylko wtedy, gdy użytkownik próbuje zrobić coś, co inicjuje sesję, na przykład zalogować się lub dodać coś do koszyka. W przeciwnym razie, w zależności od tego, jak sobie z tym radzisz, potencjalnie blokujesz dostęp do całej witryny użytkownikom - lub robotom - które nie obsługują plików cookie.
Najpierw serwer sprawdza dane logowania w normalny sposób - jeśli dane logowania są nieprawidłowe, użytkownik otrzymuje tę informację w normalny sposób. Jeśli to prawda, serwer natychmiast odpowiada za pomocą pliku cookie i przekierowania do strony, która jest zaprojektowana do sprawdzania tego pliku cookie - może to być po prostu ten sam adres URL, ale z pewną flagą dodaną do ciągu zapytania. Jeśli ta druga strona nie otrzyma pliku cookie, użytkownik otrzyma komunikat, że nie może się zalogować, ponieważ pliki cookie są wyłączone w jego przeglądarce.
Jeśli już stosujesz się do wzorca Post-Redirect-Get dla formularza logowania, to ustawienie i sprawdzenie pliku cookie nie powoduje dodania żadnych dodatkowych żądań - plik cookie można ustawić podczas istniejącego przekierowania i sprawdzić przez ładowane miejsce docelowe po przekierowaniu.
Teraz, dlaczego przeprowadzam test plików cookie tylko po akcji zainicjowanej przez użytkownika, innej niż przy każdym załadowaniu strony. Widziałem witryny wdrażające test plików cookie na każdej stronie, nie zdając sobie sprawy, że będzie to miało wpływ na takie rzeczy, jak wyszukiwarki próbujące zaindeksować witrynę. Oznacza to, że jeśli użytkownik ma włączoną obsługę plików cookie, to testowy plik cookie jest ustawiany tylko raz, więc musi wytrzymać przekierowanie tylko na pierwszej żądanej stronie i od tego momentu nie ma przekierowań. Jednak w przypadku dowolnej przeglądarki lub innego klienta użytkownika, takiego jak wyszukiwarka, które nie zwracają plików cookie, każda strona może po prostu skutkować przekierowaniem.
Inną metodą sprawdzenia obsługi plików cookie jest Javascript - w ten sposób przekierowanie nie jest konieczne - można zapisać plik cookie i odczytać go praktycznie natychmiast, aby sprawdzić, czy został zapisany, a następnie pobrany. Wadą tego jest to, że działa w skrypcie po stronie klienta - tj. Jeśli nadal chcesz, aby komunikat o tym, czy obsługiwane są pliki cookie, wraca do serwera, nadal musisz to zorganizować - na przykład za pomocą wywołania Ajax.
W mojej aplikacji wdrażam pewne zabezpieczenia przed atakami „Login CSRF”, wariantem ataków CSRF, ustawiając plik cookie zawierający losowy token na ekranie logowania przed zalogowaniem się użytkownika i sprawdzając ten token, gdy użytkownik podaje swój login Detale. Przeczytaj więcej o logowaniu CSRF od Google. Efektem ubocznym jest to, że po zalogowaniu się mogę sprawdzić istnienie tego pliku cookie - dodatkowe przekierowanie nie jest konieczne.
źródło
Zwykle wystarczy sprawdzić obsługę plików cookie po wykonaniu przez użytkownika jakiejś czynności w witrynie, takiej jak przesłanie formularza logowania, dodanie produktu do koszyka itd.
Dla mnie obecnie sprawdzanie obsługi plików cookie idzie w parze z zapobieganiem CSRF (Cross-Site Request Forgery).
Prawdopodobnie powinieneś udać się gdzie indziej, aby przeczytać więcej o CSRF , ale idea kryjąca się za tym jest taka, że inne witryny mogą oszukiwać lub nakłaniać użytkowników do przesłania wybranej przez siebie ukrytej formy do Twojej witryny. Aby obejść ten problem, należy ustawić plik cookie, gdy widz widzi formularz, i ustawić pasujący token jako ukryty element formularza, a następnie podczas przetwarzania formularza sprawdzić, czy zarówno plik cookie, jak i ukryty element formularza zostały ustawione i pasują do siebie. Jeśli jest to próba ataku CSRF, witryna nie będzie w stanie udostępnić ukrytego pola pasującego do pliku cookie użytkownika, ponieważ plik cookie użytkownika nie będzie dla nich czytelny zgodnie z zasadami tego samego pochodzenia.
Jeśli przesłany formularz nie zawiera plików cookie, ale zawiera poprawnie wyglądający token, można z tego wywnioskować, że użytkownik ma wyłączone pliki cookie i wyświetlić komunikat wskazujący, że użytkownik powinien włączyć obsługę plików cookie i spróbować ponownie. Inną możliwością jest oczywiście to, że użytkownik jest ofiarą próby ataku CSRF. Zatem blokowanie użytkownika, gdy plik cookie nie pasuje, będzie miało również efekt uboczny polegający na zapobieganiu temu atakowi.
źródło
Zawsze tego używałem:
Według w3schools „Właściwość cookieEnabled jest obsługiwana we wszystkich głównych przeglądarkach”.
Jednak działa to w przypadku mnie, gdy korzystam z formularzy, w których mogę poinstruować przeglądarkę, aby przesłała dodatkowe informacje.
źródło
Spróbuj zapisać coś w pliku cookie, a następnie przeczytaj. Jeśli nie otrzymasz tego, czego się spodziewasz, prawdopodobnie pliki cookie są wyłączone.
źródło
sprawdź ten kod, to ci pomoże.
źródło
Pytanie, czy pliki cookie są „włączone”, jest zbyt logiczne. Moja przeglądarka (Opera) ma ustawienia plików cookie dla poszczególnych witryn. Ponadto to ustawienie nie ma wartości tak / nie. Najbardziej użyteczną formą jest w rzeczywistości „tylko sesja”, ignorująca datę ważności serwerów. Jeśli przetestujesz go bezpośrednio po ustawieniu, będzie tam. Jutro tak się nie stanie.
Ponadto, ponieważ jest to ustawienie, które możesz zmienić, nawet sprawdzenie, czy pliki cookie pozostają, mówi tylko o ustawieniu podczas testowania . Mogłem zdecydować się ręcznie zaakceptować ten jeden plik cookie. Jeśli nadal otrzymuję spam, mogę (i czasami będę) po prostu wyłączać pliki cookie dla tej witryny.
źródło
Jeśli chcesz tylko sprawdzić, czy pliki cookie sesji (pliki cookie istniejące przez cały czas trwania sesji) są włączone, ustaw tryb sesji na AutoDetect w pliku web.config, a platforma Asp.Net zapisze plik cookie w przeglądarce klienta o nazwie AspxAutoDetectCookieSupport . Następnie możesz poszukać tego pliku cookie w kolekcji Request.Cookies, aby sprawdzić, czy sesyjne pliki cookie są włączone na kliencie.
Np. W zestawie plików web.config:
Następnie sprawdź, czy pliki cookie są włączone na kliencie za pomocą:
Uwaga dodatkowa: Domyślnie jest to ustawione na UseDeviceProfile, które będzie próbowało zapisywać pliki cookie dla klienta, o ile klient je obsługuje , nawet jeśli pliki cookie są wyłączone. Uważam, że to trochę dziwne, że jest to opcja domyślna, ponieważ wydaje się trochę bezcelowa - sesje nie będą działać z wyłączonymi plikami cookie w przeglądarce klienta z ustawieniem UseDeviceProfile i jeśli obsługujesz tryb bez plików cookie dla klientów, którzy nie obsługują plików cookie , dlaczego więc nie skorzystać z funkcji AutoDetect i nie obsługiwać trybu bez plików cookie dla klientów, którzy mają je wyłączone ...
źródło
Używam znacznie bardziej uproszczonej wersji odpowiedzi „balexandre” powyżej. Próbuje ustawić i odczytać plik cookie sesji wyłącznie w celu ustalenia, czy pliki cookie są włączone. I tak, wymaga to również włączonej obsługi JavaScript. Więc możesz chcieć mieć tam tag, jeśli chcesz go mieć.
źródło
NodeJS - po stronie serwera - oprogramowanie pośredniczące przekierowania sprawdzania plików cookie - Express Session / Cookie Parser
Zależności
Oprogramowanie pośredniczące
źródło
cookieEnabled
Właściwość zwraca wartość logiczną, która określa, czy pliki cookie są włączone w przeglądarceźródło
Użyj navigator.CookieEnabled, aby włączyć obsługę plików cookie (zwróci wartość true lub false) i tag HTML tagu noscript. Nawiasem mówiąc, navigator.cookieEnabled to javascript, więc nie wpisuj go jako HTML
źródło
źródło