2011-11-17 17 views
5

¿Cómo crear un objeto compartido entre diferentes sesiones en PHP?¿Cómo crear un objeto compartido entre diferentes sesiones en PHP?

Estoy pensando en utilizar archivos o tablas de memoria MySQL. Usar el archivo no es una buena opción porque no tiene bloqueo y es lento. Usar la tabla de memoria MySQL es una buena opción, pero ¿cómo guardar instancias de clase (objetos) en una tabla? Serializar un objeto y ponerlo en la mesa también es lento.

Option 1: MySQL memory table 
Option 2: shm_attach,shm_detach,shm_get_var,shm_has_var,shm_put_var,.. 
Option 3: Memcache 

El problema es utilizar la tabla de memoria MySQL requiere consultas. Memcache no está incluido en la instalación estándar de PHP. Para tener funciones shm_ * en Windows, es necesario compilar PHP desde el origen con la opción "--enable-sysvsem", y esto requiere establecer en php.ini, donde es posible que el desarrollador no pueda acceder todo el tiempo.

¿Cuál de las anteriores es la mejor? ¿Alguna otra opción?

+1

memoria compartida es una opción: ¿Qué datos http://php.net/manual/en/function.shm-get-var.php –

+2

estás hablando? ¿Cómo se ve este "objeto"? – ManseUK

+0

es una instancia de una clase que tiene estructura de varios niveles (similar a una matriz de varios niveles) – jondinham

Respuesta

1

Si desea compartir objetos (instancias de clases) entre diferentes procesos, siempre estará obligado a serialize y unserialize independientemente del tipo de capa de almacenamiento que utilice (base de datos, memchace, archivos, ...).

Si no desea utilizar serialize y unserialize, entonces no hay mucho que pueda hacer.

+0

Marc B sugirió usar las funciones del semáforo de php shm_ *, pero esto requiere un parámetro que pase a php.exe para habilitarlo. esto es lo que puedo hacer en mi PC pero no en mi servidor de alojamiento compartido. Ahora soy bastante confuso – jondinham

+0

@JonDinham, incluso si usas archivos Necesitas serializar los datos primero ¿no? – Pacerier

1

Recuerdo haber visto un problema similar con una solución en el desarrollo de eyeOS.

Sé que no está exactamente a salido sobre el uso de un archivo, pero lo que si se va a almacenar la variable (s) que desea compartir en formato XML.

Si desea tenerlo específico para ciertas sesiones, podría usar tokens únicos (una contraseña de tipo) para cada conjunto de sesiones y configurar un controlador que dirija las solicitudes al archivo xml de sesión correcto basado en el token.

Para mayor seguridad se podría almacenar la información XML en un archivo PHP y sólo permitir que la información se va a recuperar de la POST utilizando el token correcto.

Este método le permitiría acceder de forma segura, editar y eliminar (destruir) sesiones compartidas.

1

Memcache no está en la instalación estándar de PHP. Las funciones de memoria compartida de semáforo & no son compatibles con Windows.

Lo más probable es la única solución es utilizar MySQL tabla de memoria con la serialización de objetos.

1

no veo apc mencionó:

http://www.php.net/manual/en/book.apc.php

No está seguro de si está dentro de una sesión como el manual carece de cualquier información sobre lo que hace, pero en otros mensajes que veo en la alternativa a la memcache.

Estoy buscando una solución similar para almacenar plantillas de página que puedan tener que usarse mucho y almacenar usuarios autenticados en una tabla en memoria en lugar de utilizar la sesión php (la segunda parte no estoy tan seguro).

Cuestiones relacionadas