2012-03-05 8 views
7

Muy sencillo:variables de sesión no parecen estar guardados código

<? 
session_start(); 
$_SESSION['t'.time()]  = "ok"; 
echo "<pre>".print_r($_SESSION, 1)."</pre>"; 
?> 

espectáculos, como se esperaba, algo así como

Array 
(
    [t1330966834] => ok 
    [t1330966835] => ok 
    [t1330966836] => ok 
) 

después 3page recargas.

Vamos a cambiar algunos símbolos:

$_SESSION[time()]  = "ok"; 

(ahora sin 't') y espero que después de unos recargas algo así como

Array 
(
    [t1330966834] => ok 
    [t1330966835] => ok 
    [t1330966836] => ok 
    [1330967020] => ok 
    [1330967021] => ok 
    [1330967022] => ok 
    [1330967023] => ok 
) 

Pero en realidad el resultado es absolutamente diferente:

Array 
    (
     [t1330966834] => ok 
     [t1330966835] => ok 
     [t1330966836] => ok 
     [1330967020] => ok 
    ) 

Tenemos 3 celdas de matriz previas ad una y solo una celda 'time' - no importa cuántos ti mes que recarga la página. La hora es correcta, es diferente cada segundo pero solo una celda sin 't'! También probé

$t =time(); 
$_SESSION[$t]  = "ok"; 

e incluso

$t =intval(time()); 
$_SESSION[$t]  = "ok"; 

Pero es sólo queda una celda con el tiempo.

Probado en php 5.2.13 y 5.3.10 en 2 servidores diferentes. ¿Qué estoy haciendo mal?

+0

Intente asignar tanto' $ _SESSION ['t'.time()] =' ok '; $ _SESSION [time()] =' ok'' y vea qué pasa. Si 't' versiones siguen apareciendo y la versión baretime no, entonces algo raro está sucediendo. –

+0

No sé lo suficiente sobre las rarezas de las variables de sesión PHP para responder a esta pregunta, pero cuando sacas el' t' se convierte en un índice numérico en lugar de un índice de cadena. Quizás PHP solo almacena un índice numérico en las variables de sesión o algo así. No estoy seguro, pero parece que esto tiene algo que ver con eso. – Travesty3

Respuesta

6

Las teclas de la matriz asociativa $_SESSION están sujetos a las mismas limitaciones que los nombres de variables regulares en PHP, es decir, que no pueden comenzar con un número y debe comenzar con una letra o un guión. Para más detalles, consulte la sección sobre variables en este manual.

http://php.net/manual/en/session.examples.basic.php

5

Cuando arranque error_reporting camino hacia arriba, usted debe notar esto:

Aviso en < archivo>, la línea ...: session_write_close(): Saltarse la tecla numérica 1330967020

Las indecisiones numéricas de las variables de sesión son not supported.

2

Esto es cosa no extraña. Simplemente saltea las teclas numéricas. Puede ver este error si ha habilitado la notificación para que se muestre.

Como se menciona en this, haga clic en php.net. No debe usar teclas numéricas para definir valores en sesión.

Cita

cuidado de no tratar de usar entero como una clave para la matriz $ _SESSION (por ejemplo, $ _SESSION [0] = 1;) o se obtendrá el error "Aviso: Desconocido: Saltarse tecla numérica 0.en Desconocido en la línea 0 "

Cuestiones relacionadas