Apache/PHP 中会话文件的位置

问题描述 投票:0回答:8

在 Ubuntu 10.10 上安装 Apache/PHP 时会话文件的默认位置是什么?

php apache session
8个回答
91
投票

default

session.save_path
设置为
""
,它将评估您系统的临时目录。请参阅此评论 https://bugs.php.net/bug.php?id=26757 指出:

即将发布的版本(原文如此)中 save_path 的新默认值将是空字符串,这会导致临时目录被探测。

您可以使用

sys_get_temp_dir
返回临时文件使用的目录路径

要查找当前会话保存路径,您可以使用

参考这个答案来了解当该函数返回空字符串时临时路径是什么。


78
投票

首先使用

session.save_path
ini_get('session.save_path')
检查
phpinfo()
的值。如果它非空,那么它将显示会话文件的保存位置。在许多情况下它默认为空,在这种情况下请继续阅读:

在 Ubuntu 或 Debian 计算机上,如果未设置

session.save_path
,则会话文件将保存在
/var/lib/php5
中。

在 RHEL 和 CentOS 系统上,如果未设置

session.save_path
,会话文件将保存在
/var/lib/php/session

我认为如果你从源代码编译PHP,那么当未设置

session.save_path
时,会话文件将保存在
/tmp
中(不过我自己没有测试过)。


17
投票

如果不确定

session.save_path
的编译默认值,请查看相关的
php.ini

通常,这将显示注释掉的默认值。

Ubuntu/Debian 旧/新

php.ini
位置:
较旧的 php5 与 Apache:
/etc/php5/apache2/php.ini

较旧的 php5 与 NGINX+FPM:
/etc/php5/fpm/php.ini

Ubuntu 16+ 与 Apache:
/etc/php/*/apache2/php.ini
*
Ubuntu 16+ 与 NGINX+FPM -
/etc/php/*/fpm/php.ini
*

*

/*/
= 系统上安装的当前 PHP 版本。

显示 Apache 下正在使用的 PHP 版本:

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

7.3

由于 PHP 7.3 是本示例运行的版本,因此您可以将其用于

php.ini
:

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

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

或者,组合单行:

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

结果:

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


或者,使用 PHP 本身使用“cli”环境来获取值(参见下面的NOTE):

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

这些也可以工作:

php -i | grep session.save_path

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

注意:

php.ini
的“cli”(命令行)版本通常具有与Apache2/FPM版本相同的默认值(至少与
session.save_path
相同)。您还可以使用类似的命令将 Web 服务器当前的 PHP 模块设置回显到网页,并使用 wget/curl 来获取信息。关于 phpinfo() 在这方面的使用,
有很多帖子
。但是,使用 PHP 接口或在正确的
grep
中显示其默认值会更快。
编辑:根据 @aesede 评论 -> 添加 

php.ini

。谢谢

    


15
投票
php -i

之外,另一个常见的默认位置是

/tmp/
    


4
投票
/var/lib/php5/

,而 CLI 使用类似

/var/tmp
的东西。但无论哪种方式,当
/var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T
为空时,
sys_get_temp_dir()
都让我找到了正确的路径。使用 PHP 5.5.4。
    


3
投票

session.save_path

但是,会话并未保存在 
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

文件夹中,而是保存在

/tmp
文件夹中:

/var/lib/php/mod_php/session/



2
投票
ls /var/lib/php/mod_php/session/ > sess_3cebqoq314pcnc2jgqiu840h0k sess_ck5dtaerol28fpctj6nutbn6fn sess_i24lgt2v2l58op5kfmj1k6qb3h sess_nek5q1alop8fkt84gliie91703 > sess_9ff74f4q5ihccnv6com2a8409t sess_dvrt9fmfuolr8bqt9efdpcbj0d sess_igdaksn26hm1s5nfvtjfb53pl7 sess_tgf5b7gkgno8kuvl966l9ce7nn

值的唯一可靠选项始终是在您想要查找会话存储目录的环境中使用

session.save_path
进行检查。

原因:可能有各种各样的事情会改变

phpinfo()

,可以通过覆盖

session.save_path
值或在运行时使用
php.ini
设置它。例如,像 ISPConfig、Plesk 等 Web 服务器管理面板经常采用这种方式,为每个网站提供自己的包含会话文件的目录。
    


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.