J'ai un problème avec la définition de cookies dans PHP. J'ai dit que je ne suis pas très expérimenté avec PHP, alors peut-être un problème très stupide.
J'ai un système de notation Ajax qui devrait vérifier un cookie pour voir si la photo a déjà été votée. < / p>
la page appelée avec Ajax Cochez pour le cookie, ajoutez l'ID de la photo à voter et appelez cette fonction: p> la page que afficher la photo appelez également la cookie p> et vérifier si vous avez déjà voté. p> Un problème peut être le fait que la page Ajax est peut-être Dans un répertoire différent de la page qui affiche la photo. p> La page qui affiche la photo est dans le répertoire racine, la page qui exerce le vote est dans /ajax/vote.php p> < p> Le système de vote fonctionne, avant que je vérifiais l'IPS, mais je sais que je dois vérifier les cookies. P> Il fonctionne dans Firefox sans aucun problème, mais quand j'ai commencé à tester sur IE et safari il semblent qu'ils ne voient pas le cookie. P> J'ai vérifié avec iecookieviewer et quand je vote, le cookie est créé Allrigh t, mais quand je retourne à la page, il semble que la page ne trouve pas le cookie. De plus, si je jette un autre vote, le cookie est remplacé par un nouveau. P> Désolé pour le mauvais anglais, j'espère que le problème est compréhensible p> P.S. Oublié de pointer quelque chose qui pourrait être lié au problème. La page est à l'intérieur d'un iframe. p> p>
5 Réponses :
Vérifiez les paramètres de cookie des autres navigateurs et s'ils sont définis pour bloquer tout ou vide à la sortie.
Si les cookies fonctionnent dans un navigateur, mais pas une autre, vous devrez vous assurer que l'autre navigateur vous permet de définir des cookies en premier lieu. p>
Parfois, il ressemblera à vous permettre de créer le cookie, mais il disparaîtra ou sera supprimé de chaque rechargement de page. P>
Il est également possible que, parce que vous définissez les cookies dans une iframe, les navigateurs peuvent le considérer comme un cookie tiers et la rejeter, sauf indication explicite dans les préférences du navigateur pour Autoriser les cookies tiers . P>
Dans ce cas, vous auriez besoin d'une politique de confidentialité compacte (ou un en-tête P3P compact ) sur les pages d'où vous essayez de Et les cookies de. P>
pour PHP, vous ajouteriez ceci comme votre en-tête pour la page définissant la cookie: p>
Ce n'est pas un problème avec l'autre navigateur. J'ai déjà vérifié sur différents ordinateurs. Fonctionne avec Firefox, non avec Safari, Opera, Chrome, IE
Header ('P3P: CP = "IDC DSP COR ADM Devi Taii PSA PSD Ivai Ivdi Coni Son Notre Ind CNT"'); C'était le problème, merci
J'ai eu un problème similaire dans le passé où les cookies seraient définis par Firefox, mais pas, c'est-à-dire que si je travaillais avec un serveur de réseau local (192.168.0.102 ou quelque chose comme ça), mais quand je l'ai porté partout au serveur public avec un nom de domaine qui fonctionnait bien. p>
IE peut avoir une sorte de règles étranges sur les cookies et les noms de domaine. Je ne sais pas si cela aide dans votre cas. P>
Les règles ne sont pas si étranges. Vous ne pouvez pas définir d'attributs de domaine contenant un soulignement, ni celui qui ne contient aucun point (périodes). C'est à peu près ça.
L'iframe est la raison pour laquelle vos cookies sont perdus. Votre cookie PHP Session ID est également perdue et une nouvelle session est créée sur chaque demande, perdant donc une piste de l'état précédent. P>
Bien que les en-têtes P3P puissent aider, les navigateurs clients peuvent toujours être définis pour interdire les cookies tiers et P3P ne peuvent pas le remplacer. Steve Gibson de Security maintenant! Podcast La renommée recommande à plusieurs reprises d'activer le blocage des cookies tiers car il arrête des choses comme suivi des cookies. P>
Ce que vous devez faire est de passer à l'ID de session basé sur la forme. PHP rend cela facile en fournissant la variable de formulaire "phpsessid" dans la variable de la requête ou de la variable d'entrée cachée avec la valeur de session_id () code>. Ou si vous souhaitez être portable, vérifiez la valeur de
ini_get ('session.name') code> Incicast Le serveur Web est configuré avec un nom de variable de session personnalisé, différent de "phpsessid". P>
Vous définissez le cookie sur exactement la même URL? Si vous utilisez Pour quote PHP DOCS : P>
Le domaine que le cookie est disponible. Pour rendre le cookie disponible sur tous les sous-domaines d'exemple.com, vous l'avez défini sur'Example.com '. Le . n'est pas nécessaire mais le rend compatible avec plus de navigateurs. Le réglage sur www.example.com rendra le cookie uniquement disponible sur le sous-domaine WWW. P>
blockQuote>
alors essayez de régler ".Yoursite.com" comme le domaine. p>
Autres choses à essayer: p>
$ _ Server ['http_host'] code>, un navigateur peut le définir pour http: // Exemples.com tandis qu'un autre peut la définir sur http://www.example.com . Si vous visitez la version alternative, le cookie ne sera pas défini. P>
Problème en biscuits para IE Solueucionado: Problème aux cookies pour IE résolu: p>
ES Simple, Cuando Déclaren La Cookie Y Escriten en El Expire: Time () + 60 * 60 * 24 * 30, Cambien Los 60's Por 120 Asi: Time () + 120 * 120 * 24 * 30. Un me me funcion'o a la perfeccion. P>
Son simple, lorsque vous déclarez le cookie, à l'heure de l'expiration "Time () + 60 * 60 * 24 * 30", modifier LOS 60's par 120 SO: Time () + 120 * 120 * 24 * 30. Cela a fonctionné pour moi. P>
testez-vous cela sur localhost ? Cela pourrait être ce problème: Stackoverflow.com/questions/489369