2011-09-08 18 views

Respuesta

14

Después de leer el blog que usted se refiere y la lectura del código de las clases Session y NativeSessionStorage, lo que me gustaría tratar de imitar el comportamiento mencionado en la entrada del blog es hacer esto:

$session = $this->get('session'); 

// Change the session attributes 

$session->save(); 
session_write_close(); 

// Do database calls and other stuff. 

I no lo probé, pero debería funcionar como se esperaba. Otra solución a su problema es utilizar un almacenamiento de sesión diferente al NativeSessionStorage que se usa de manera predeterminada. Puede usar, por ejemplo, un almacenamiento de base de datos utilizando el objeto PdoSessionStorage. Esto podría evitar que PHP use un bloqueo. Consulte esto cookbook entry para obtener más información sobre cómo usar un almacenamiento de base de datos para las sesiones.

Pero no hay ninguna garantía de que el sistema de base de datos no apilará varias solicitudes si están accediendo a la misma fila, pero debería ser mucho más rápido que con el NativeSessionStorage.

Saludos,
Matt

+0

Probado, funciona bien !! – AlterPHP

+0

Excelente, gracias por haber probado la solución :) – Matt

+0

Si no te importa, he citado tu solución en esta publicación del blog: http://blog.alterphp.com/2012/08/how-to-deal-with -asynchronous-request.html. Avíseme si está molesto ... – AlterPHP

1

Sólo una advertencia para aquellos que están usando el PHP incorporada en el servidor web (como me quedé atrapado, podría ayudar a los demás):

Desde el doc PHP:

El servidor web ejecuta un único proceso de subproceso único, por lo que las aplicaciones PHP se detendrán si se bloquea una solicitud.

Significa que incluso si cierra la sesión correctamente, igual terminará bloqueándose con una conexión a la vez.

http://php.net/manual/en/features.commandline.webserver.php

Cuestiones relacionadas