2010-09-18 10 views
5

tengo una variable de sesión que puse como esto:entre páginas

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

Luego en otra página que tienen esta:

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

El problema es que no lo hacen partido. Tengo dos cadenas completamente diferentes. register_globals está desactivado. Observé que cuando establezco md5(....) en una cadena constante, por ejemplo: md5('example'), funciona como se esperaba y las dos cadenas coinciden. Pero eso no debería importar. ¿Alguna idea sobre lo que está pasando aquí?

EDIT: Apache Log de acceso:

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" 

No estoy muy seguro de cómo leer pero parece que a mí que mi archivo (index.php que supongo que es el '/') está siendo llamado tres veces. ¿Estoy leyendo eso bien? ¿Que esta pasando ahí?

+0

No puedo reproducir este comportamiento. Verifique sus registros de acceso y brinde más detalles sobre el entorno que está utilizando. Es obvio que el código proporcionado no es el sistema completo, probablemente esté reiniciando ese token en otro lugar. –

+0

Se sabe que algunos complementos de navegador causan el comportamiento de que se envíen varias solicitudes en lugar de una. – James

+0

@Josh K No estoy ... ambas páginas son estáticas por ahora. Lo único que se establece o cambia es el token y eso solo ocurre en un lugar como se muestra arriba. – williamg

Respuesta

3

Error completamente estúpido de mi parte. Tenía algunas etiquetas <img> vacías que causaban las solicitudes adicionales. facepalm Disculpe a todos, problema resuelto. ¡¡Gracias por tu ayuda!!

1

Parece raro. El primer fragmento de código que restablece el token debe haberse ejecutado de nuevo de alguna manera.

2

La única solución que puedo pensar es que está haciendo una segunda solicitud a la primera página sin saberlo. Probablemente debería comprobar su registro de acceso de Apache para este segundo acceso ...

desarrollo de un simple contador de peticiones sería otra solución para comprobar esto:

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

Sí ... ese es el problema. Cuando pongo este código, obtengo 2. No puedo entender por qué ... Es una página estática a excepción de la parte de token. Sin bucles, actualización de contenido, etc ... – williamg

+0

Publiqué mi registro de Apache Access arriba. – williamg

+0

¿Quiere decir que cada vez que actualiza la página, se agrega 2 en lugar de uno? ¿Ves 2, 4, 6, etc.? ¿Tienes alguna extensión especial en tu navegador? Como validador de HTML para Firefox? – greg0ire

2

Usted se dará cuenta de que cada vez que vuelva a la primera página , su variable de sesión cambiará. Como funciona para una cadena constante, 'ejemplo', asumiré que revisa la página 1 para ver lo que está almacenado allí.

Una revisión podría estar comprobando para asegurarse de que esa variable de sesión no esté establecida antes de volver a establecerla. decir

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

Este trozo de código debería funcionar como se espera.

+0

¡No, el mismo problema, pero gracias por intentarlo! – williamg

+0

Muy útil respuesta. Dos pulgares arriba hermano! –

Cuestiones relacionadas