2010-09-18 13 views
5

ho una variabile di sessione che ho impostato in questo modo:sessione PHP variabile cambia tra le pagine

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

Poi in un'altra pagina ho questo:

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

Il problema è che non lo fanno incontro. Ottengo due stringhe completamente diverse. register_globals è spento. Ho notato che quando ho impostato md5(....) su una stringa costante, ad esempio: md5('example'), funziona come previsto e le due stringhe corrispondono. Ma non dovrebbe importare. Qualche idea su cosa sta succedendo qui?

EDIT: Apache Acces 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" 

io non sono molto sicuro come leggere questo, ma sembra a me che il mio file (index.php che presumo sia il '/') è in corso chiamato tre volte. Sto leggendo giusto? Cosa sta succedendo là?

+0

Non riesco a riprodurre questo comportamento. Controlla i log di accesso e fornisci ulteriori dettagli sull'ambiente che stai utilizzando. È ovvio che il codice fornito non è l'intero sistema, probabilmente stai resettando quel token in un altro posto. –

+0

Alcuni plug-in del browser sono noti per causare il comportamento che vengono inviate diverse richieste anziché una. – James

+0

@Josh K Non sono ... entrambe le pagine sono statiche per ora. L'unica cosa che viene impostata o cambia è il token e ciò avviene solo in un punto come mostrato sopra. – williamg

risposta

3

Errore assolutamente stupido da parte mia. Avevo alcuni tag vuoti <img> che causavano richieste extra. facepalm Scusate tutti, problema risolto. Grazie per l'aiuto!!

1

Sembra strano. Quel primo pezzo di codice che resetta il token deve essere stato eseguito di nuovo in qualche modo.

2

L'unica soluzione che posso pensare è che si sta facendo una seconda richiesta alla prima pagina senza saperlo. Probabilmente si dovrebbe verificare il log di accesso Apache per questo secondo accesso ...

Fare un semplice contatore richiesta sarebbe un'altra soluzione per controllare questo:

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

Sì ... questo è il problema. Quando inserisco questo codice, ottengo 2. Non riesco a capire perché comunque ... È una pagina statica ad eccezione della parte token. Nessun loop, aggiornamento del contenuto, ecc ... – williamg

+0

Ho postato il mio log di accesso Apache sopra. – williamg

+0

intendi ogni volta che aggiorni la pagina, 2 viene aggiunto invece di uno? Vedi 2, 4, 6, ecc.? Hai qualche estensione speciale nel tuo browser? Come il validatore HTML per firefox? – greg0ire

2

si noterà che ogni volta che si rivisitare la prima pagina , la tua variabile di sessione cambierà. Dato che funziona con una stringa costante, 'esempio', supporrò che tu rivisiti la pagina 1 per vedere cosa è memorizzato lì.

Una correzione potrebbe essere verificata per garantire che quella variabile di sessione non sia impostata prima di reimpostarla. cioè

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

Questo pezzo di codice dovrebbe funzionare come previsto.

+0

No, lo stesso problema, ma grazie per aver provato! – williamg

+0

Risposta molto utile. Due pollici in su bro! –

Problemi correlati