2010-03-18 16 views
11

En ASP.NET si declaro una variable (u objeto) estática (o si hago un singleton) puedo hacer que persista en varias sesiones de varios usuarios (se registró en un servidor alcance) para que no tenga que inicializarlo en cada solicitud.Variables estáticas en las sesiones

¿Existe tal característica en PHP? Gracias

+0

¿Es este un caso de uso para Redis? – pbarney

Respuesta

2

Puede hacerlo con una extensión de PHP (escrita en C).

Pero si quieres escribirlo en PHP, no. La mejor alternativa es escribir la variable en un archivo (file_put_contents()) al final de cada solicitud y abrirla al inicio de cada solicitud (file_get_contents()).

Esa alternativa no va a funcionar para sitios de alto volumen porque los procesos harán lectura/escritura al mismo tiempo y el mundo irá a todos BLAAA-WOOO-EEE-WOHHH-BOOOM.

+8

+1 para una descripción precisa del fin del mundo. : P – DrFriedParts

0

Lamentablemente, no. La palabra clave static de PHP está limitada solo a la instancia de script actual.

Para persistir los datos entre instancias de script para la misma sesión, usaría las características session handling.

Para persistir los datos en todas las sesiones, debe usar algo como memcache, sin embargo, eso requiere un trabajo adicional de configuración en el lado del servidor.

0

podría almacenar copias en serie de un objeto dentro de la sesión

 
class test{ 
    private static $instance; 
    public property; 
    private __construct(){} 
    public getInstace(){ 
    if(!self::$instance){ 
     self::$instance = new test; 
    } 
    return self::$instance; 
    } 
} 

$p = test->getInstance(); 
$p->property = "Howdy"; 
$_SESSION["p"] = $p; 

página siguiente

 
$p = $_SESSION["p"]; 
echo $p->property; // "Howdy" 
+1

IMO, esto comparte la variable solo entre las páginas de la misma sesión: no es útil para compartir entre varias sesiones o múltiples usuarios. – T30

+0

es una respuesta anterior, hoy en día recomendaría escribir un módulo, hay muchas opciones como C o C++ para escribir con facilidad un módulo compartido compilado. – markcial

4

que existen Indiferente en PHP, sin embargo, puede serializar los datos y ponerlo ya sea en un archivo en el disco duro o en/dev/shm /. También puedes usar Memcache.

Si coloca sus datos en/dev/shm/o utiliza memcache, los datos desaparecerán al reiniciar.

Cuestiones relacionadas