2010-05-25 28 views
76

Recientemente me actualicé a PHP 5.3 y desde entonces recibo mensajes de error (esporádicos) que indican que Apache (o puede ser el limpiador de los archivos de sesión) no tiene permisos para la carpeta donde están las sesiones almacenado
Esto ocurre al azar y no se puede reproducir con pasos exactos, lo que me llevó a adivinar que es el limpiador de la sesión.
¿Alguien tiene alguna experiencia con tales errores?Problemas con PHP 5.3 y carpeta de sesiones

El mensaje de error (que se disparó en la línea session_start()) es:

ps_files_cleanup_dir: opendir (/ var/lib/php5) falló: Permiso denegado.

ls -ltr en el directorio de sesiones da:

drwx-wx-wt 2 root   root   4096 2010-05-25 12:39 php5 

Dentro de este directorio hago ver los archivos de sesión propiedad de www-data, que es mi Apache, y la aplicación no funcionan bien. Lo que me hace preguntarme, ¿bajo qué usuario funciona la sesión GC?

+0

Lo hice, pero no en 5.3. Resultó ser un error de permisos que se había filtrado a la ruta de guardado de la sesión. ¿Supongo que ha verificado los permisos? –

+0

@Jarrod Veo que www-data puede leer y escribir en esa carpeta (que tiene w & r para todo el mundo en este momento, usuario, grupo y mundo) ¿debo consultar algo más? –

+0

Supongo que la razón por la que ocurre esporádicamente es que el error ocurre cuando se ejecuta el recolector de basura de la sesión, que creo que de forma predeterminada tiene un 1% de probabilidad de ejecutarse por la inicialización de la sesión. ¿Ha realizado algún cambio en php.ini con respecto a las sesiones? ¿Qué hay fuera del valor predeterminado aquí? Compruebe el propietario de la carpeta de la sesión, después de eso estoy perdido sin ver el .ini o los errores. –

Respuesta

116

La solución: En su php.ini conjunto session.gc_probability a 0

La causa Creo que he encontrado la respuesta aquí http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

Esencialmente, la recolección de basura está configurado para ser hecho por cron trabajos en algunos sistemas (es decir, Ubuntu/Debian). Algunos ejecutables php ini como php-cli también intentan hacer recolección de basura y eso da como resultado el error que obtuviste.

+1

1 simplemente me sacó de problemas :) – kapa

+0

Trabajado muy bien, THX una tonelada! – Bakhtiyor

+5

También estoy experimentando este problema en Ubuntu 10.04, pero al comprobar php.ini encontré 'session.gc_probability' ya establecido en' 0'. – Jonathan

0

La solución que uso actualmente (que no estoy seguro es la correcta) es asignar la propiedad de la carpeta de sesión al usuario de Apache (www-data en mi caso).

+1

como se menciona anteriormente Marie , que puede crear un problema de seguridad para cualquier servidor de producción. – Kzqai

+0

he implementado desde hace mucho tiempo la solución correcta :-) Pero, el problema de seguridad es principalmente en servidores compartidos –

+1

Podría decirnos cuál es la solución correcta es? Sesión de limpieza – commonpike

21

Esto parece ser un error típico en los servidores de Ubuntu (estoy usando Lucid LTS). Los permisos por defecto del directorio/var/lib/php5 hay

drwx-wx-wt 2 root  root  4096 2011-11-04 02:09 php5 

para que pueda ser escrito, pero no leída por el servidor web, supongo que eso explica los errores.

Como Ubuntu tiene su propia limpieza de basura a través de cron (/etc/cron.d/php5), probablemente sea mejor desactivar la recolección de basura de php como lo sugirió anteriormente Diwant Vaidya.

session.gc_probability = 0 

De hecho, hay una razón por la carpeta de sesión no debe ser legible mundo - como el PHP Manual dice:

Si deja este conjunto a un directorio de lectura global, tal como/tmp (el predeterminado), otros usuarios en el servidor pueden secuestrar sesiones por obteniendo la lista de archivos en ese directorio.

0

Este problema me ha estado molestando por un tiempo. Cambié el valor como se sugiere en php.ini y el problema seguía ocurriendo. Encontré el mismo valor de configuración en mi index.php y también privado/Zend/session.php.Así que vale la pena buscar un poco más profundo si el problema sigue ocurriendo. Espero que esto sea útil para alguien.