在 CentOS 上配置 PHP 会话(Session),通常包括 会话存储方式、存储路径、权限、生命周期、安全选项 等。下面分常见场景说明。
php -v
php --ini
常见路径:
/etc/php.ini/etc/php.d/*.ini/etc/php-fpm.d/www.conf编辑配置文件:
vim /etc/php.ini
session.save_handler = files
session.save_path = "/var/lib/php/session"
⚠️ 注意:
mkdir -p /var/lib/php/session
chown -R apache:apache /var/lib/php/session # Apache
# 或
chown -R nginx:nginx /var/lib/php/session # Nginx + PHP-FPM
chmod 700 /var/lib/php/session
session.gc_maxlifetime = 1440 ; 秒(默认 24 分钟)
session.cookie_lifetime = 0 ; 浏览器关闭失效
如果你希望会话保持更久:
session.gc_maxlifetime = 86400
session.use_strict_mode = 1
session.use_only_cookies = 1
session.cookie_httponly = 1
session.cookie_secure = 1 ; HTTPS 环境才开启
session.use_trans_sid = 0
如果使用 PHP-FPM,也可以在:
vim /etc/php-fpm.d/www.conf
设置:
php_value[session.save_path] = /var/lib/php/session
php_value[session.gc_maxlifetime] = 86400
systemctl restart httpd
systemctl restart nginx
systemctl restart php-fpm
创建测试文件:
<?php
session_start();
$_SESSION['test'] = 'CentOS PHP Session OK';
echo $_SESSION['test'];
访问页面后检查:
ls /var/lib/php/session
tail -f /var/log/httpd/error_log
# 或
tail -f /var/log/php-fpm/error.log
常见原因:
临时关闭测试:
setenforce 0
永久解决(推荐):
setsebool -P httpd_unified 1
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
如果你愿意,可以告诉我:
我可以给你一份 完全贴合你环境的配置方案。