Wie kann ich auf dem Server (serverseitig) feststellen, ob Cookies im Browser deaktiviert sind? Ist es möglich?
Detaillierte Erklärung: Ich verarbeite eine HTTP-Anfrage auf dem Server. Ich möchte ein Cookie über den Set-Cookie
Header setzen. Ich muss zu diesem Zeitpunkt wissen, ob das Cookie vom Client-Browser gesetzt wird oder meine Anfrage zum Setzen des Cookies ignoriert wird.
http
cookies
server-side
Alexander Yanovets
quelle
quelle
Antworten:
Senden Sie eine Weiterleitungsantwort mit dem Cookie-Set. bei der Verarbeitung des (speziellen) umgeleiteten URL-Tests für das Cookie - wenn es dort zur normalen Verarbeitung umleitet, andernfalls zur Umleitung in einen Fehlerzustand.
Beachten Sie, dass dies nur Ihnen mitteilen kann, dass der Browser das Setzen des Cookies zugelassen hat, nicht jedoch wie lange. Mit meinem FF kann ich alle Cookies in den "Sitzungs" -Modus zwingen, es sei denn, die Site wird speziell zu einer Ausnahmeliste hinzugefügt. Solche Cookies werden verworfen, wenn FF unabhängig vom angegebenen Server-Ablauf heruntergefahren wird. Und in diesem Modus starte ich FF immer.
quelle
Sie können Javascript verwenden, um dies zu erreichen
Bibliothek:
Auszuführender Code:
Merken
Dies funktioniert nur, wenn Javascript aktiviert ist!
quelle
Ich glaube nicht, dass es direkte Möglichkeiten gibt, dies zu überprüfen. Am besten speichern Sie einen Wert im Cookie und versuchen, ihn zu lesen und zu entscheiden, ob Cookies aktiviert sind oder nicht.
quelle
Eine übliche Methode zur Überprüfung der Cookie-Unterstützung ist die Weiterleitung.
Es ist eine gute Idee, dies nur zu tun, wenn der Benutzer versucht, etwas zu tun, das eine Sitzung initiiert, z. B. sich anzumelden oder etwas in den Warenkorb zu legen. Andernfalls blockieren Sie je nach Handhabung möglicherweise den Zugriff auf Ihre gesamte Website für Benutzer - oder Bots -, die keine Cookies unterstützen.
Zunächst überprüft der Server die Anmeldedaten wie gewohnt. Wenn die Anmeldedaten falsch sind, erhält der Benutzer diese Rückmeldung wie gewohnt. Wenn es richtig ist, antwortet der Server sofort mit einem Cookie und einer Weiterleitung auf eine Seite, auf der nach diesem Cookie gesucht werden soll. Dies kann nur dieselbe URL sein, aber der Abfragezeichenfolge wird ein Flag hinzugefügt. Wenn diese zweite Seite das Cookie nicht erhält, erhält der Benutzer eine Nachricht, dass er sich nicht anmelden kann, weil Cookies in seinem Browser deaktiviert sind.
Wenn Sie bereits dem Post-Redirect-Get-Muster für Ihr Anmeldeformular folgen, werden durch diese Einstellung und Überprüfung des Cookies keine zusätzlichen Anforderungen hinzugefügt. Das Cookie kann während der vorhandenen Umleitung festgelegt und vom zu ladenden Ziel überprüft werden nach der Weiterleitung.
Nun, warum ich einen Cookie-Test nur nach einer vom Benutzer initiierten Aktion außer bei jedem Laden der Seite durchführe. Ich habe gesehen, dass Websites auf jeder einzelnen Seite einen Cookie-Test implementieren, ohne zu wissen, dass dies Auswirkungen auf Dinge wie Suchmaschinen haben wird, die versuchen, die Website zu crawlen. Wenn für einen Benutzer Cookies aktiviert sind, wird das Test-Cookie einmal gesetzt, sodass er nur auf der ersten angeforderten Seite eine Weiterleitung aushalten muss und von da an keine Weiterleitungen mehr vorhanden sind. Für jeden Browser oder anderen Benutzeragenten wie eine Suchmaschine, der keine Cookies zurückgibt, kann jedoch jede einzelne Seite einfach zu einer Weiterleitung führen.
Eine andere Methode zur Überprüfung der Cookie-Unterstützung ist Javascript. Auf diese Weise ist keine Weiterleitung erforderlich. Sie können ein Cookie schreiben und es praktisch sofort zurücklesen, um festzustellen, ob es gespeichert und dann abgerufen wurde. Der Nachteil dabei ist, dass es auf der Clientseite in einem Skript ausgeführt wird. Wenn Sie also weiterhin die Nachricht erhalten möchten, ob Cookies unterstützt werden, um zum Server zurückzukehren, müssen Sie dies weiterhin organisieren - beispielsweise bei einem Ajax-Aufruf.
Für meine eigene Anwendung implementiere ich einen gewissen Schutz für "Login CSRF" -Angriffe, eine Variante von CSRF-Angriffen, indem ich ein Cookie mit einem zufälligen Token auf dem Anmeldebildschirm setze, bevor sich der Benutzer anmeldet, und dieses Token überprüfe, wenn der Benutzer seine Anmeldung einreicht Einzelheiten. Lesen Sie mehr über Login CSRF von Google. Ein Nebeneffekt davon ist, dass ich in dem Moment, in dem sie sich anmelden, überprüfen kann, ob dieses Cookie vorhanden ist - eine zusätzliche Weiterleitung ist nicht erforderlich.
quelle
Normalerweise müssen Sie möglicherweise erst nach Cookie-Unterstützung suchen, nachdem der Benutzer auf der Website Maßnahmen ergriffen hat, z. B. das Senden eines Anmeldeformulars, das Hinzufügen eines Artikels zum Warenkorb usw.
Für mich geht die Überprüfung der Cookie-Unterstützung derzeit Hand in Hand mit der CSRF-Prävention (Cross-Site Request Forgery).
Sie sollten wahrscheinlich woanders hingehen, um mehr über CSRF zu lesen , aber die Idee dahinter ist, dass andere Websites Ihre Benutzer dazu verleiten könnten, eine versteckte Form ihrer Wahl an Ihre eigene Website zu senden. Um dies zu umgehen, müssen Sie ein Cookie setzen, wenn der Betrachter ein Formular sieht, und ein übereinstimmendes Token als verstecktes Formularelement festlegen. Überprüfen Sie dann bei der Verarbeitung des Formulars, ob sowohl das Cookie als auch das versteckte Formularelement gesetzt wurden und miteinander übereinstimmen. Wenn es sich um einen versuchten CSRF-Angriff handelt, kann die Site das ausgeblendete Feld nicht bereitstellen, das mit dem Cookie des Benutzers übereinstimmt, da das Cookie des Benutzers für ihn unter derselben Richtlinie nicht lesbar ist.
Wenn ein Formular ohne Cookie gesendet wird, das jedoch ein gültig aussehendes Token enthält, können Sie daraus schließen, dass der Benutzer Cookies deaktiviert hat, und eine Meldung anzeigen, dass der Benutzer Cookies aktivieren und erneut versuchen sollte. Die andere Möglichkeit besteht natürlich darin, dass der Benutzer Opfer eines versuchten CSRF-Angriffs wird. Das Blockieren des Benutzers, wenn das Cookie nicht übereinstimmt, hat also auch den Nebeneffekt, dass dieser Angriff verhindert wird.
quelle
Ich habe das immer benutzt:
Laut w3schools "wird die Eigenschaft cookieEnabled in allen gängigen Browsern unterstützt."
Dies funktioniert jedoch bei mir, wenn ich Formulare verwende, bei denen ich den Browser anweisen kann, die zusätzlichen Informationen zu senden.
quelle
Versuchen Sie, etwas in einem Cookie zu speichern, und lesen Sie es dann. Wenn Sie nicht das bekommen, was Sie erwarten, sind Cookies wahrscheinlich deaktiviert.
quelle
Überprüfen Sie diesen Code, es wird Ihnen helfen.
quelle
Die Frage, ob Cookies "aktiviert" sind, ist zu boolesch. Mein Browser (Opera) verfügt über eine Cookie-Einstellung pro Site. Außerdem ist diese Einstellung nicht Ja / Nein. Die nützlichste Form ist in der Tat "Nur Sitzung", wobei das Ablaufdatum der Server ignoriert wird. Wenn Sie es direkt nach dem Einstellen testen, ist es dort. Morgen wird es nicht.
Da es sich um eine Einstellung handelt, die Sie ändern können, werden Sie auch beim Testen, ob Cookies verbleiben, nur über die Einstellung informiert, die Sie getestet haben . Ich hätte vielleicht beschlossen, diesen einen Cookie manuell zu akzeptieren. Wenn ich weiterhin Spam bekomme, kann (und werde ich manchmal) einfach Cookies für diese Site deaktivieren.
quelle
Wenn Sie nur überprüfen möchten, ob Sitzungscookies (Cookies, die für die Lebensdauer der Sitzung vorhanden sind) aktiviert sind, setzen Sie Ihren Sitzungsmodus in Ihrer web.config-Datei auf AutoDetect. Das Asp.Net-Framework schreibt dann ein Cookie in den Clientbrowser genannt AspxAutoDetectCookieSupport . Sie können dann in der Sammlung Request.Cookies nach diesem Cookie suchen, um zu überprüfen, ob Sitzungscookies auf dem Client aktiviert sind.
ZB in Ihrem web.config-Dateisatz:
Überprüfen Sie dann, ob Cookies auf dem Client aktiviert sind mit:
Nebenbemerkung: Standardmäßig ist dies auf UseDeviceProfile eingestellt, das versucht, Cookies auf den Client zu schreiben, solange der Client sie unterstützt , auch wenn Cookies deaktiviert sind. Ich finde es etwas seltsam, dass dies die Standardoption ist, da es irgendwie sinnlos erscheint - Sitzungen funktionieren nicht mit Cookies, die im Client-Browser deaktiviert sind und auf UseDeviceProfile eingestellt sind, und wenn Sie den Cookieless-Modus für Clients unterstützen, die keine Cookies unterstützen Verwenden Sie dann AutoDetect und unterstützen Sie den Cookieless-Modus für Clients, bei denen sie deaktiviert sind.
quelle
Ich verwende eine viel vereinfachte Version der obigen Antwort von "balexandre". Es wird versucht, ein Sitzungscookie zu setzen und zu lesen, um festzustellen, ob Cookies aktiviert sind. Und ja, dafür muss auch JavaScript aktiviert sein. Vielleicht möchten Sie dort ein Tag, wenn Sie eines haben möchten.
quelle
NodeJS - Serverseite - Cookie Check Redirect Middleware - Express-Sitzung / Cookie-Parser
Abhängigkeiten
Middleware
quelle
Die
cookieEnabled
Eigenschaft gibt einen booleschen Wert zurück, der angibt, ob Cookies im Browser aktiviert sind oder nichtquelle
Verwenden Sie navigator.CookieEnabled für aktivierte Cookies (es wird true oder false zurückgeben) und das HTML-Tag noscript. Übrigens ist navigator.cookieEnabled Javascript, geben Sie es also nicht als HTML ein
quelle
quelle