He tenido un problema con síntomas idénticos al suyo, excepto si el archivo de sesión se eliminó o no era irrelevante (y puede serlo también para usted) ¿Tiene evidencia de que la eliminación del archivo de sesión está relacionada con el flock
?).
En mi caso, fue una condición de carrera para el acceso al mismo archivo de sesión entre los dos guiones:
/page1.php
ejecuta bien cuando está cargado. Incluye javascript que hace un XMLHttpRequest a /background.php
.
- Cuando se accede a
/background.php
, se ejecuta readfile(http://remote.url)
, que es una URL inexistente.
- Al navegar a
/page2.php
, la secuencia de comandos está detenida. Una cadena muestra flock(89, LOCK_EX
, e lsof indica que está esperando el acceso de lectura/escritura en un archivo de sesión.
En este escenario, tanto /page2.php
y /background.php
están ambos esperando en el mismo archivo de sesión, pero éste fue incapaz de hacerlo, ya que se llevó a cabo a la espera de la readfile()
de tiempo de espera. Tengo esto en un php_error_log
:
PHP Warning: readfile(http://remote.url): failed to open stream: Connection timed out in […]/background.php on line […]
Así que el problema era con un guión completamente diferente que el culpable percibido.
Puede comprobar si este problema rápidamente por grepping todos los archivos abiertos para el archivo de sesión php para ver qué proceso httpd lo está utilizando:
$ sudo lsof | grep sess_it9q6kkvf83gcj72vu05p9fcad7
httpd 31325 apache 74u REG 8,5 410 11634061 /var/lib/php/session/sess_it9q6kkvf83gcj72vu05pfa543
httpd 31632 apache 74uW REG 8,5 410 11634061 /var/lib/php/session/sess_it9q6kkvf83gcj72vu05pfa543
Si dos procesos httpd acceden al mismo archivo de sesión, probablemente este es tu problema. Ahora se puede ver que estos procesos están haciendo con strace, o en mi caso fue suficiente para utilizar apachectl fullstatus
:
$ sudo apachectl fullstatus | grep 31632
5-7 31632 0/1/1169 _ 0.05 6 30692 0.0 0.02 3.45 111.222.333.444 www.example.com.com /background.php
a) Esta pregunta es probablemente mejor dirigida hacia http://webmasters.stackexchange.com/ b) ¿Quién borró el archivo de la sesión? ¿Tú o PHP? ¿Hace cuánto tiempo fue eliminado? ¿Estás seguro de que se ha eliminado y no está bloqueado por otro proceso? – DaveRandom
¿está utilizando la gestión de sesiones de php o un controlador de sesión personalizado? – dqhendricks
¿Alguna información viene a través del registro de errores que puede relacionarse con el porqué de esto? –