Un moyen courant de vérifier la prise en charge des cookies consiste à utiliser une redirection.
C'est une bonne idée de ne faire cela que lorsque l'utilisateur essaie de faire quelque chose qui lance une session, comme se connecter ou ajouter quelque chose à son panier. Sinon, selon la façon dont vous le gérez, vous bloquez potentiellement l'accès à l'ensemble de votre site aux utilisateurs - ou aux robots - qui ne prennent pas en charge les cookies.
Tout d'abord, le serveur vérifie les données de connexion comme d'habitude - si les données de connexion sont erronées, l'utilisateur reçoit ce retour comme d'habitude. Si c'est vrai, le serveur répond immédiatement avec un cookie et une redirection vers une page conçue pour vérifier ce cookie - qui peut être simplement la même URL mais avec un indicateur ajouté à la chaîne de requête. Si cette deuxième page ne reçoit pas le cookie, l'utilisateur reçoit un message indiquant qu'il ne peut pas se connecter car les cookies sont désactivés sur son navigateur.
Si vous suivez déjà le modèle Post-Redirect-Get pour votre formulaire de connexion, alors ce paramètre et la vérification du cookie n'ajoutent aucune demande supplémentaire - le cookie peut être défini pendant la redirection existante et vérifié par la destination qui se charge après la redirection.
Maintenant, pourquoi je ne fais un test de cookie qu'après une action initiée par l'utilisateur autre qu'à chaque chargement de page. J'ai vu des sites mettre en œuvre un test de cookie sur chaque page, sans me rendre compte que cela allait avoir des effets sur des choses comme les moteurs de recherche essayant d'explorer le site. Autrement dit, si un utilisateur a activé les cookies, le cookie de test est défini une fois, de sorte qu'il ne doit subir une redirection que sur la première page qu'il demande et à partir de là, il n'y a pas de redirection. Cependant, pour tout navigateur ou autre agent utilisateur, comme un moteur de recherche, qui ne renvoie pas de cookies, chaque page peut simplement entraîner une redirection.
Une autre méthode de vérification de la prise en charge des cookies est avec Javascript - de cette manière, aucune redirection n'est nécessairement nécessaire - vous pouvez écrire un cookie et le relire pratiquement immédiatement pour voir s'il a été stocké puis récupéré. L'inconvénient est que cela fonctionne en script côté client - c'est-à-dire que si vous voulez toujours que le message indiquant si les cookies sont pris en charge pour revenir au serveur, vous devez toujours organiser cela - comme avec un appel Ajax.
Pour ma propre application, j'implémente une protection contre les attaques `` Login CSRF '', une variante des attaques CSRF, en définissant un cookie contenant un jeton aléatoire sur l'écran de connexion avant que l'utilisateur ne se connecte, et en vérifiant ce jeton lorsque l'utilisateur soumet son login détails. En savoir plus sur la connexion CSRF de Google. Un effet secondaire de ceci est que dès qu'ils se connectent, je peux vérifier l'existence de ce cookie - une redirection supplémentaire n'est pas nécessaire.