2013-03-02 4 views
1

J'utilise un code simple comme test car ma page ne fonctionne pas, peut-être qu'il me manque quelque chose ?! J'ai google pour ce problème et recherché ici mais personne ne semble l'avoir mentionné! même sur cookie tuts j'ai lu!PHP définit COOKIE, modifié avec le plugin JQUERY COOKIE, ne peut pas être édité avec php?

i ont une simple ligne setcookie php de code:

<?php 
if($_COOKIE['PHP1'] !== 'php'){ 
$blah = setcookie('PHP1','php',time() + (1000 * 120),'/','',false,false);} 
?> 

Son en haut de la page avant tout html et définit le PHP1 cookie à php très bien;

J'ai alors un code sur le corps:

<?php 
if($blah){echo 'PHP1 has been set';} 
else { 
    echo 'cookie php1 = ' . $_COOKIE['PHP1'];} 
?> 

pour me dire si le cookie est défini ou, si elle est définie, ce que la valeur est. droit et fonctionne bien ...

(La page a jquery et jquery plug-in: COOKIE: lié;) Puis, en utilisant la console vérifier le cookie pour sa valeur et changer la valeur avec le plugin cookie, Code ci-dessous:

$.cookie('PHP1'); 
--"php" 
$.cookie('PHP1','javascript', { expires: 7, path: '/' }); 
--"PHP1=javascript; expires=Sat, 09 Mar 2013 19:00:57 GMT; path=/" 
$.cookie('PHP1'); 
--"javascript" 

tout est bon jusqu'à ici, donc j'actualisez la page et php me dit, comme prévu PHP1 est réglé; Puis actualisez à nouveau en espérant voir php1 = php mais cela ne fait que répéter que PHP1 est activé!

Si je modifie le code PHP juste pour me montrer la valeur de PHP1, il me dit que la valeur de PHP1 est javascript?

Est-ce que je fais quelque chose de mal ici? ou est-ce juste que je ne peux pas éditer un cookie avec php après javascript a trafiqué? (Je suppose que cela pourrait être la sécurité?)

Le cookie lui-même n'est pas pour les fonctions de connexion ou de sécurité, il va simplement être utilisé pour les paramètres d'accessibilité - taille du texte - daltonisme. Je voudrais être en mesure d'utiliser à la fois javascript incase est/est désactivé pour une raison quelconque!

Merci à l'avance

EDIT

ok j'ai regardé les biscuits pour mon localhost en chrome et il y a deux biscuits PHP1:

Name: PHP1 
Content: php 
Domain: localhost 
Path: /
Send For: Any kind of connection 
Accessible to Script: Yes 
Created: Saturday, 2 March 2013 19:01:21 
Expires: Monday, 4 March 2013 04:21:21 


Name: PHP1 
Content: javascript 
Domain: localhost 
Path: /Cookie_test 
Send For: Any kind of connection 
Accessible to Script: Yes 
Created: Saturday, 2 March 2013 18:50:08 
Expires: When the browsing session ends 

Je pense que le second,/Cookie_test path, c'est le javascript! donc si c'est le problème, comment puis-je faire en sorte que javascript écrit le chemin comme "/" et pas le dir aussi? comme vous pouvez le voir dans mon code, je lui ai donné le chemin "/"?

est-ce réellement parce que je n'ai pas ajouté la 5ème option comme je l'ai fait en PHP?

+1

La définition du cookie avec php nécessite la mise à jour de la page. Il vous montre le cookie parce que vous avez actualisé la page, mais il montre le dernier cookie pas le nouveau – MIIB

+0

Les cookies ne peuvent pas être modifiés (par le serveur ou le client), jamais. Seulement désactivé et recréé. – Rudie

+1

@Rudie N'est-ce pas vrai de la plupart des choses que nous parlons de "montage"? Nous lisons l'ancienne valeur, la modifions et réécrivons la nouvelle valeur, même si une fonction d'ordre supérieur donne l'impression de "modification en place". Et les cookies peuvent certainement être * écrasés * sans être explicitement * unset *, car un nouvel entête 'Set-Cookie' remplace toujours les données précédentes. – IMSoP

Répondre

2

Pour développer le commentaire @ MIIB, les superglobal PHP setcookie() function et $_COOKIE n'interagissent pas directement.

Comme le manuel précise sous la rubrique « commune Pitfalls »:

Les cookies ne deviendront pas visibles avant la prochaine chargement d'une page que le cookie doit être visible.

En effet, $_COOKIE est créé au début du script PHP sur la base des biscuits reçus à partir du navigateur; D'autre part, setcookie() définit quels cookies seront envoyé au navigateur lorsque le script envoie sa sortie.

Vous pouvez envelopper votre setcookie appel à quelque chose qui remplace aussi $_COOKIE (ou, mieux encore, ont un objet de votre propre avec getCookie et setCookie méthodes).

EDIT: Comme exemple vraiment trivial d'une telle fonction qui écrit directement à $_COOKIE:

function set_cookie_and_superglobal($cookie_name, $cookie_value) 
{ 
    // For simplicity, this hard-codes the same parameters as the code in the question, and just generalises the name and value 
    setcookie($cookie_name, $cookie_value, time() + (1000 * 120),'/','',false,false); 
    $_COOKIE[$cookie_name] = $cookie_value; 
} 
+0

ce serait pourquoi j'ai dit "dites-moi si le cookie est en cours de définition ou, si elle est définie, quelle est la valeur." Je comprends comme commenté ci-dessus qu'un cookie est seulement défini ou lu dans une charge, il ne peut pas être les deux, c'est-à-dire ne peut pas être lu si vient d'être réglé! pourriez-vous me donner un exemple de votre dernier paragraphe, s'il vous plaît? Es-tu en train de dire que j'ai besoin de 'setcookie ($ _ COOKIE, 'value' ...);'? –

+0

J'ai ajouté un exemple pour clarifier, même si cela ne semble pas avoir été votre problème. – IMSoP

+0

lol oui, mais merci quand même. toujours bon d'apprendre plus de quelqu'un avec plus de connaissances. très appréciée. –

0

Mon problème, comme nous l'avons HERE était dû à localhost !!! si j'utilise mon loopback (127.0.0.1) cela fonctionne parfaitement, en faisant comme je l'ai dit. Je l'ai lu a quelque chose à voir avec pas de "." Dans localhost et certains navigateurs (comme le chrome) ne l'aimons pas !! Une partie du problème était que jquery lirait le cookie php puis définirait son propre second cookie avec les détails supplémentaires dans le chemin comme modifié dans ma question. Php lirait alors celui-ci comme il se doit mais lors de la mise en place d'un cookie, il "éditerait" son ancien cookie tout en lisant encore le cookie Jquery !!!