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.