Ubicación de los archivos de sesión en Apache / PHP

81

¿Cuál es la ubicación predeterminada de los archivos de sesión en una instalación de Apache / PHP en Ubuntu 10.10?

cambraca
fuente
12
simplemente haz una página con <?php phpinfo() ?>y busca el session.save_path.
prodigitalson
1
Normalmente / tmp (IIRC) pero verifique su php.ini para session.save_path
Mark Baker

Respuestas:

79

El valor predeterminado session.save_path está establecido en ""que se evaluará en el directorio temporal de su sistema. Vea este comentario en https://bugs.php.net/bug.php?id=26757 indicando:

El nuevo valor predeterminado para save_path en las próximas versiones (sic) será la cadena vacía, lo que hace que se analice el directorio temporal.

Puede usar sys_get_temp_dirpara devolver la ruta del directorio utilizada para archivos temporales

Para encontrar la ruta de guardado de la sesión actual , puede usar

Consulte esta respuesta para averiguar cuál es la ruta temporal cuando esta función devuelve una cadena vacía.

Gordon
fuente
68
Y desde la línea de comando simplemente haga php -r 'echo session_save_path (), "\ n";'
Richard Ayotte
La ubicación está configurada y no es 'predeterminada' en Ubuntu 10.10. Una compilación limpia de PHP puede proporcionarle esto, pero no bajo ninguna compilación de Debian / Ubuntu que haya usado. La pregunta original se refiere a Ubuntu 10.10. Entonces, solo búsquelo en la línea de comando por último comentario (o mi respuesta) ya que la ubicación puede diferir de 'predeterminada' / en blanco / tmp dependiendo de la distribución de Linux utilizada ..
bshea
4
¡¡Advertencia!! Creo que ejecutar php -r 'echo session_save_path (), "\ n";' como se mencionó anteriormente usará un archivo php.ini diferente (quizás /etc/php/7.0/cli/php.ini en lugar de /etc/php/7.0/apache2/php.ini), y por lo tanto podría tener un valor diferente de " session.save_path "
Magmatic
@Magmatic es correcto, hay DOS php.iniarchivos, php_info()le dirá cuál está en uso durante la evaluación actual y locate php.inilo ayudará a encontrarlos
Jonathan
Tenga en cuenta (según los últimos 2 comentarios): El uso de la versión CLI de PHP (línea de comando) puede producir resultados diferentes según la distribución y la compilación. Lo principal es que NO es la versión de Apache. (Aunque los archivos INI pueden ser idénticos en cuanto a rutas de sesión). Es mejor buscar en / grep Apache PHP.INI adecuado.
bshea
69

Primero verifique el valor de session.save_pathusar ini_get('session.save_path')o phpinfo(). Si no está vacío, mostrará dónde se guardan los archivos de sesión. En muchos escenarios, está vacío de forma predeterminada, en cuyo caso siga leyendo:

En máquinas Ubuntu o Debian, si session.save_pathno está configurado, los archivos de sesión se guardan en formato /var/lib/php5.

En los sistemas RHEL y CentOS, si session.save_pathno está configurado, los archivos de sesión se guardarán en/var/lib/php/session

Creo que si compila PHP desde la fuente, cuando session.save_pathno esté configurado, los archivos de sesión se guardarán en /tmp(aunque no lo he probado yo mismo).

Rico
fuente
1
Estoy usando Ubuntu 12.04.5 LTS y, por alguna razón (no he cambiado nada en php.ini) mis sesiones están por debajo de/var/lib/php5/sessions
Felipe
"No configurado"? Está configurado, pero comentado en php.ini. Esto no significa que no tenga un valor o que no esté "configurado". Desde la línea de comandos simplemente hazlo: php -i | grep session.save_pathpara la ruta de guardado de la sesión CLI (y probablemente Apache). Además, un dado php.ininormalmente mostrará la ruta 'predeterminada', solo se comenta.
bshea
Y sí: si no se compila nada en la ruta predeterminada (no es el caso con la mayoría de las distribuciones), se usará un espacio en blanco (compilar predeterminado). Que luego usaría el área de temperatura del sistema (normalmente /tmp) como su valor de respaldo / predeterminado. Consulte php.net/manual/en/…
bshea
@bshea, por "no establecido", quise decir establecido en la cadena vacía
Rich
DEFAULT Ubuntu 16.04: /etc/php/7.0/*/php.ini-> ;session.save_path = "/var/lib/php/sessions"- Un comentario no significa que "no configurado" es todo lo que quise decir. Obviamente, se establece en algo que no sea 'en blanco' (/ tmp) .. y NO es una cadena vacía / nula
bshea
16

Si no está seguro del valor predeterminado compilado para session.save_path, consulte el archivo pertinente php.ini.
Normalmente, esto mostrará el valor predeterminado comentado.

php.iniUbicaciones antiguas / nuevas de Ubuntu / Debian :
php5 antiguo con Apache: /etc/php5/apache2/php.ini
php5 antiguo con NGINX + FPM: /etc/php5/fpm/php.ini
Ubuntu 16+ con Apache: /etc/php/*/apache2/php.ini*
Ubuntu 16+ con NGINX + FPM - /etc/php/*/fpm/php.ini*

* /*/= las versiones actuales de PHP instaladas en el sistema.

Para mostrar la versión de PHP en uso en Apache:

$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"

7.3

Dado que PHP 7.3 es la versión que se ejecuta para este ejemplo, la usaría para php.ini:

$ grep "session.save_path" /etc/php/7.3/apache2/php.ini

;session.save_path = "/var/lib/php/sessions"

O, combinado de una sola línea:

$ APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini

Resultado:

;session.save_path = "/var/lib/php/sessions"


O bien, utilice PHP para obtener el valor mediante el entorno "cli" (consulte la NOTA a continuación):

$ php -r 'echo session_save_path() . "\n";'
/var/lib/php/sessions
$

Estos también funcionarán:

php -i | grep session.save_path

php -r 'echo phpinfo();' | grep session.save_path

NOTA:

La versión 'cli' (línea de comandos) de php.ini normalmente tiene los mismos valores predeterminados que las versiones Apache2 / FPM (al menos en lo que respecta a session.save_path). También puede usar un comando similar para hacer eco de la configuración actual del módulo PHP del servidor web en una página web y usar wget / curl para obtener la información. Hay muchas publicaciones sobre el phpinfo()uso en este sentido. Pero, es más rápido simplemente usar la interfaz PHP o greppara que php.inimuestre su valor predeterminado correctamente .

EDITAR: Por comentario de @aesede -> Agregado php -i. Gracias

bshea
fuente
7
Solo para su información, puede hacerlo php -ien CLI para obtener el equivalente de phpinfo ().
aesede
15

Otra ubicación predeterminada común además /tmp/es/var/lib/php5/

Kevin Borders
fuente
¿Cómo es que / var / lib / php5 / nunca se puede escribir y requiere chmodding / chowning? ¿No debería PHP establecer la ubicación de la sesión en la que se puede escribir de forma predeterminada?
CMCDragonkai
2
Me imagino que es así en los hosts compartidos que otras personas no pueden intentar secuestrar las sesiones de las personas. Es decir, escriba a la sesión diciendo "nombre de usuario: admin" y estableciendo una ID de sesión arbitraria, luego estableciendo PHPSESSID a eso. Sería muy fácil acceder a algo como Drupal o Wordpress en un entorno de host compartido. (Simplemente iniciaría sesión como la cuenta de administrador)
Mattisdada
4

Tuve el mismo problema para encontrar la ruta correcta para las sesiones en una Mac. Con todo, descubrí que CLI PHP tiene un directorio temporal diferente al del módulo Apache: Apache usó /var/tmp, mientras que CLI usó algo como /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T. Pero en ambos sentidos, sys_get_temp_dir()me dio el camino correcto cuando session.save_pathestá vacío. Usando PHP 5.5.4.

themarketka
fuente
1

Nada de lo anterior funcionó para mí al usar el repositorio IUS para CentOS 7 con PHP 7.2:

php -v
> PHP 7.2.30 (cli) (built: Apr 19 2020 00:32:29) ( NTS )

php -r 'echo session_save_path(), "\n";
> 

php -r 'echo sys_get_temp_dir(), "\n";'
> /tmp

Sin embargo, las sesiones no se guardaron en la /tmpcarpeta, sino en la /var/lib/php/mod_php/session/carpeta:

ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k  sess_ck5dtaerol28fpctj6nutbn6fn  sess_i24lgt2v2l58op5kfmj1k6qb3h  sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t  sess_dvrt9fmfuolr8bqt9efdpcbj0d  sess_igdaksn26hm1s5nfvtjfb53pl7  sess_tgf5b7gkgno8kuvl966l9ce7nn
Tim
fuente
0

Creo que está en / tmp /. Sin embargo, verifique su función phpinfo, debería decir session.save_path en algún lugar.

profitphp
fuente
Aunque los documentos de PHP dicen que "/ tmp" es el valor predeterminado, todas las distribuciones de Linux que he probado no colocan los archivos de sesión /tmp. ¿Conoce alguna que lo haga? ¿Es ese el caso si crea PHP desde la fuente? Cuando "session.save_path" está vacío, puede ser complicado averiguar dónde van los archivos (de ahí esta pregunta, sospecho)
Rich
0

La única opción infalible para encontrar el session.save_pathvalor actual es siempre verificar phpinfo()exactamente el entorno en el que desea averiguar el directorio de almacenamiento de la sesión.

Razón: puede haber todo tipo de cosas que cambian session.save_path, ya sea anulando el php.inivalor o configurándolo en tiempo de ejecución con ini_set('session.save_path','/path/to/folder');. Por ejemplo, los paneles de administración de servidores web como ISPConfig, Plesk, etc., a menudo lo adaptan para dar a cada sitio web su propio directorio con archivos de sesión.

tanius
fuente
-8

Dependiendo del tipo de servidor que esté ejecutando, puede variar. Para ubicar el directorio, busque lo siguiente en su archivo php.ini.

upload_tmp_dir = "c: / wamp / tmp"

El directorio puede ser diferente para usted.

nombre en blancopor ahora
fuente
6
La pregunta era para archivos de sesión, no archivos cargados
Rich