Je me demande si vous utilisez le code JavaScript suivant est fiable:
if (!document.cookie) { alert('Cookies are disabled.'); }
5 Réponses :
Essayez de définir une valeur sur le serveur et de le lire sur le client. Si des cookies sont activés, vous devriez pouvoir lire la même valeur. Sinon, ils sont handicapés. Notez que le site pourrait avoir httponly activé. P>
La détection du côté serveur est la voie la plus fiable
Dans les documents XHTML, il n'y a pas de Ceci est valide JS, et le navigateur haussa ses épaules et définit la propriété < Code> Cookie Code> de la variable Pour le mettre en un mot: Non, vous ne pouvez pas être sûr que l'absence de document.cookie code> du tout (jusqu'à Firefox 2 ou pour toujours si vous envoyez le document comme
Application / XML code>). Je devais apprendre douloureusement, que cela puisse être défini sur
document code>, cependant:
document code>. Mais la magie spéciale pour transformer cela dans un en-tête HTTP ne s'appelle pas. P>
document.cookie code> est toujours identique avec les cookies désactivés et vice versa. p> p>
Évidemment, il s'appuie également sur JavaScript allumé. L'utilisateur a pu quitter les cookies activés, mais éteint JavaScript.
@Paul: La question implique JS est sur, ou pas? Sinon, le code n'est pas non fiable si l'ordinateur client est désactivé.
Je n'ai pas lu cette implication de la question. Il a demandé si l'utilisation du code JavaScript en question était "fiable". JavaScript étant sur est une préoccupation secondaire, mais c'est pourquoi j'ai ajouté ce point comme un commentaire à ce que je pensais être la meilleure réponse, et mettez le mot "évidemment" au début. (Si l'ordinateur client est désactivé, peu importe que les cookies soient activés ou non. Si JavaScript est éteint, il est probablement toujours.)
Je ne vois pas ce comportement sur ma page XHTML. J'ai essayé | JavaScript: alerte (document.cookie); | et | JavaScript: alerte (document.cookie = 'foo = bar'); | dans Firefox 3.0 et plus tard. Pas de problèmes du tout. Peux-tu élaborer?
@janmoesen: semble qu'ils ont corrigé celui-ci sur des documents XHTML (pour prouver que je n'étais pas fantasiliant: simonwillison.net/2003/jul/3/accessingcookies ). C'était là dans FF2. Cependant, il reste valide, car vous pouvez également servir des documents comme Application / XML CODE> (Peut-être avec certains XSLT ou des trucs dans le navigateur), puis vous avez le même problème.
Le seul moyen fiable de moi dans ce scénario (vérifiez si les cookies sont Vous pouvez écrire votre propre implémentation de la lecture d'une excellente ressource de QuirksMode , Utilisez un JQuery Plugin ou un solution hors de la boîte . P>
var gotCookie = (navigator.cookieEnabled) ? true : false; if(typeof navigator.cookieEnabled == 'undefined' && !gotCookie) { document.cookie = 'test'; gotCookie = (document.cookie.indexOf('test') != -1) ? true : false; } if gotCookie == true, then you've gotCookie :)note: when there's no cookie set, document.cookie seems to be unavailable even if cookie is enabled in the browser. that's why we set it with document.cookie = 'test', then check it on the next line. of course, assuming that js is enabled.
Opera 7.10 ne comprendra pas le document.cookie, il n'est donc pas fiable. Essayez d'utiliser celui-ci à la place:
<script type="text/javascript"> var cookieEnabled=(navigator.cookieEnabled)? true : false //if not IE4+ nor NS6+ if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){ document.cookie="testcookie" cookieEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false } //if (cookieEnabled) //if cookies are enabled on client's browser //do whatever </script>
Cela peut être aussi peu fiable - mais vous pouvez combiner
documents.cookie code> tests avec
navigator.cookieenabled code>.
Je ne sais pas. La question, comme libellé, semble très fiable. Lorsque vous évaluez le document.cookie (ou! Document.cooke) renvoie-t-il la valeur correcte tout le temps? Oui. Est-ce un indicateur de savoir si le sous-système de cookies est pleinement actif? Pas vraiment.