2010-09-18 7 views
5

J'ai une variable de session que je Posé comme ceci:session PHP modifications variables entre les pages

<?php 
$token = md5(uniqid(rand(), true)); 
session_start(); 
$_SESSION['token'] = $token; 
print $_SESSION['token']; 
?> 

Puis sur une autre page, j'ai ceci:

<?php 
session_start(); 
print $_SESSION['token']; 
?> 

Le problème est qu'ils ne sont pas rencontre. Je reçois deux chaînes complètement différentes. register_globals est désactivé. J'ai remarqué que quand j'ai mis md5(....) à une chaîne constante par exemple: md5('example') cela fonctionne comme prévu et les deux chaînes correspondent. Mais cela ne devrait pas avoir d'importance. Des idées sur ce qui se passe ici?

EDIT: Apache Accès Log:

127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /index.php HTTP/1.1" 200 3182 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /style/style.css HTTP/1.1" 304 - "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /js/signup.js HTTP/1.1" 304 - "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /index.php HTTP/1.1" 200 3182 "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 
127.0.0.1 - - [18/Sep/2010:17:46:10 -0500] "GET /index.php HTTP/1.1" 200 3182 "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3" 

Je ne suis pas tout à fait sûr de savoir comment lire cela, mais il me semble que mon dossier (index.php que je suppose est le «/») est en cours appelé trois fois. Est-ce que je lis bien? Que se passe-t-il ici?

+0

Je ne peux pas reproduire ce comportement. Vérifiez vos journaux d'accès et donnez plus de détails sur l'environnement que vous utilisez. Il est évident que le code fourni n'est pas tout le système, vous êtes probablement en train de réinitialiser ce jeton à un autre endroit. –

+0

Certains plugins de navigateur sont connus pour provoquer le comportement que plusieurs demandes sont envoyées au lieu d'un. – James

+0

@Josh K Je ne suis pas ... les deux pages sont statiques pour le moment. La seule chose qui est définie ou change est le jeton et cela se produit uniquement à un endroit comme indiqué ci-dessus. – williamg

Répondre

3

Erreur complètement stupide de ma part. J'ai eu quelques <img> étiquettes vides là qui ont provoqué les demandes supplémentaires. facepalm Désolé tout le monde, problème résolu. Merci de votre aide!!

1

Ça a l'air bizarre. Ce premier morceau de code qui réinitialise le jeton doit avoir été à nouveau exécuté.

2

La seule solution à laquelle je peux penser est que vous faites une deuxième requête à la première page sans le savoir. Vous devriez probablement vérifier votre journal d'accès apache pour ce deuxième accès ...

Faire un compteur de demande serait une autre solution pour vérifier:

$_SESSION['counter'] = isset($_SESSION['counter'])? $_SESSION['counter'] +1 : 0; 
+0

Oui, c'est le problème. Quand je mets ce code là-dedans, j'en ai 2. Je n'arrive pas à comprendre pourquoi ... C'est une page statique sauf pour la partie jeton. Pas de boucle, mise à jour du contenu, etc ... – williamg

+0

J'ai posté mon journal Apache Access ci-dessus. – williamg

+0

vous voulez dire chaque fois que vous actualisez la page, 2 est ajouté au lieu d'un? Vous voyez 2, 4, 6, etc? Avez-vous une extension spéciale dans votre navigateur? Comme validateur HTML pour Firefox? – greg0ire

2

Vous remarquerez que chaque fois que vous revisitez la première page , votre variable de session va changer. Comme cela fonctionne pour une chaîne constante, 'example', je suppose que vous revisitez la page 1 pour voir ce qui y est stocké.

Un correctif peut être vérifier pour s'assurer que cette variable de session n'est pas définie avant de le définir à nouveau. dire

<?php 
session_start(); 
if(!empty($_SESSION['token'])){ 
    $token = md5(uniqid(rand(), true)); 
    $_SESSION['token'] = $token; 
} 
print $_SESSION['token']; 
?> 

Ce morceau de code devrait fonctionner comme prévu.

+0

Non, même problème, mais merci d'essayer! – williamg

+0

Réponse très utile. Deux pouces en l'air –

Questions connexes