Comment puis-je détecter sur le serveur (côté serveur) si les cookies du navigateur sont désactivés? C'est possible?
Explication détaillée: je traite une requête HTTP sur le serveur. Je souhaite définir un cookie via l'en- Set-Cookie
tête. J'ai besoin de savoir à ce moment-là si le cookie sera défini par le navigateur client ou si ma demande de configuration du cookie sera ignorée.
http
cookies
server-side
Alexandre Yanovets
la source
la source
Réponses:
Envoyez une réponse de redirection avec l'ensemble de cookies; lors du traitement du test (spécial) d'URL redirigée pour le cookie - s'il y est redirigé vers le traitement normal, sinon rediriger vers un état d'erreur.
Notez que cela peut seulement vous indiquer que le navigateur a autorisé le cookie à être défini, mais pas pour combien de temps. My FF me permet de forcer tous les cookies en mode «session», à moins que le site ne soit spécifiquement ajouté à une liste d'exceptions - ces cookies seront supprimés lorsque FF s'arrêtera indépendamment de l'expiration spécifiée par le serveur. Et c'est le mode dans lequel je lance toujours FF.
la source
Vous pouvez utiliser Javascript pour y parvenir
Bibliothèque:
Code à exécuter:
Rappelles toi
Cela ne fonctionne que si Javascript est activé!
la source
Je ne pense pas qu'il existe des moyens directs de vérifier. Le meilleur moyen est de stocker une valeur dans le cookie et d'essayer de les lire et de décider si les cookies sont activés ou non.
la source
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.
la source
Habituellement, vous n'aurez besoin de vérifier la prise en charge des cookies qu'après que l'utilisateur a effectué une action sur le site, comme la soumission d'un formulaire de connexion, l'ajout d'un article à son panier, etc.
Pour moi actuellement, la vérification de la prise en charge des cookies va de pair avec la prévention CSRF (Cross-Site Request Forgery).
Vous devriez probablement aller ailleurs pour en savoir plus sur CSRF , mais l'idée derrière cela est que d'autres sites peuvent inciter vos utilisateurs à soumettre une forme cachée de leur choix à votre propre site. La solution consiste à définir un cookie lorsque le spectateur voit un formulaire et à définir un jeton correspondant en tant qu'élément de formulaire masqué, puis lors du traitement du formulaire, à vérifier que le cookie et l'élément de formulaire masqué ont été définis et correspondent. S'il s'agit d'une tentative d'attaque CSRF, le site ne sera pas en mesure de fournir le champ masqué correspondant au cookie de l'utilisateur, car le cookie de l'utilisateur ne sera pas lisible pour eux dans le cadre de la politique de même origine.
Si un formulaire est soumis sans cookie, mais qu'il contient un jeton d'apparence valide, vous pouvez en conclure que l'utilisateur a désactivé les cookies et afficher un message indiquant que l'utilisateur doit activer les cookies et réessayer. L'autre possibilité, bien sûr, est que l'utilisateur soit victime d'une tentative d'attaque CSRF. Ainsi, bloquer l'utilisateur lorsque le cookie ne correspond pas aura également pour effet secondaire d'empêcher cette attaque.
la source
J'ai toujours utilisé ceci:
Selon w3schools "La propriété cookieEnabled est prise en charge dans tous les principaux navigateurs.".
Cependant, cela fonctionne pour moi lorsque j'utilise des formulaires, où je peux demander au navigateur d'envoyer les informations supplémentaires.
la source
Essayez de stocker quelque chose dans un cookie, puis lisez-le. Si vous n'obtenez pas ce que vous attendez, les cookies sont probablement désactivés.
la source
vérifiez ce code, cela vous aidera.
la source
La question de savoir si les cookies sont «activés» est trop booléenne. Mon navigateur (Opera) a un paramètre de cookie par site. De plus, ce paramètre n'est pas oui / non. La forme la plus utile est en fait "session uniquement", ignorant la date d'expiration des serveurs. Si vous le testez directement après le réglage, il sera là. Demain, ce ne sera pas le cas.
De plus, comme il s'agit d'un paramètre que vous pouvez modifier, même le fait de tester si les cookies restent ne vous informe que du paramètre lorsque vous avez testé . J'aurais peut-être décidé d'accepter ce cookie, manuellement. Si je continue à être spammé, je peux (et je le ferai parfois) simplement désactiver les cookies pour ce site.
la source
Si vous souhaitez uniquement vérifier si les cookies de session (cookies qui existent pour la durée de vie de la session) sont activés, définissez votre mode de session sur AutoDetect dans votre fichier web.config, puis le framework Asp.Net écrira un cookie dans le navigateur client appelé AspxAutoDetectCookieSupport . Vous pouvez ensuite rechercher ce cookie dans la collection Request.Cookies pour vérifier si les cookies de session sont activés sur le client.
Par exemple, dans votre ensemble de fichiers web.config:
Vérifiez ensuite si les cookies sont activés sur le client avec:
Remarque: par défaut, il est défini sur UseDeviceProfile, qui tentera d'écrire des cookies sur le client tant que le client les prend en charge , même si les cookies sont désactivés. Je trouve un peu étrange que ce soit l'option par défaut car cela semble en quelque sorte inutile - les sessions ne fonctionneront pas avec les cookies désactivés dans le navigateur client avec le paramètre UseDeviceProfile, et si vous prenez en charge le mode sans cookie pour les clients qui ne prennent pas en charge les cookies , alors pourquoi ne pas utiliser AutoDetect et prendre en charge le mode sans cookie pour les clients qui les ont désactivés ...
la source
J'utilise une version beaucoup plus simplifiée de la réponse de "balexandre" ci-dessus. Il essaie de définir et de lire un cookie de session dans le seul but de déterminer si les cookies sont activés. Et oui, cela nécessite également que JavaScript soit activé. Vous voudrez peut-être une étiquette là-dedans si vous voulez en avoir une.
la source
NodeJS - Côté serveur - Intergiciel de redirection de vérification des cookies - Session express / Analyseur de cookies
Dépendances
Middleware
la source
La
cookieEnabled
propriété renvoie une valeur booléenne qui spécifie si les cookies sont activés ou non dans le navigateurla source
Utilisez navigator.CookieEnabled pour les cookies activés (il retournera vrai ou faux) et la balise Html noscript. Au fait, navigator.cookieEnabled est javascript, alors ne le tapez pas au format HTML
la source
la source