PHP 7.2.10
CentOS
当我们的系统开启了session,当遇到大并发的时候,不可避免的会在服务器上存储有大量的session文件,默认的session方式为文件,而大量小文件的查找效率是很低的,肯定会影响系统性能,所以必须设置session的管理方式,常用的为redis。
方法1:
在不修改任何配置的情况下。如果开启了session,可以通过 session_id()
函数来获取/设置当前会话 ID,于是我们利用这个ID来
将session和会话信息存储到redis,这是基于用户态的方式,其实这种方式并没有改变PHP去创建文件,查找并读取文件的事实,因为这个只是在原来基础上再建立一层管理机制而已,不建议这种方式。
方法2:修改php.ini
全局态
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
或者使用密码
session.save_path = "tcp://127.0.0.1:6379?auth=123456"
vi /etc/php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
service php-fpm restart
打印phpinfo();发现不生效,还得修改 php-fpm的配置文件,准确的说,php-fpm的优先级比php.ini高。
vi /etc/php-fpm.d/www.conf
将
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
改为:
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://127.0.0.1:6379"
service php-fpm restart
打印phpinfo();已生效。
测试:
session_set.php
<?php
session_start();
$_SESSION['username'] = 'rao';
session_get.php
<?php
session_start();
echo $_SESSION['username'];
进入 /var/lib/php/session 目录,清除之前的session文件
cd /var/lib/php/session
rm -rf *
访问
http://192.168.10.200/session_set.php
http://192.168.10.200/session_get.php
打印出 rao
查看redis
db0 生成了一条session
cd /var/lib/php/session
ls
空的,证明已经不再生成session文件了。
方法3:ini_set
用户态
ini_set("session.save_handler", "redis");
ini_set("session.save_path", "tcp://127.0.0.1:6379");
方法4:session_set_save_handler()
设置用户自定义会话存储函数
用户态
session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp ]]] ) : bool
允许你为session操作的每一步自定义回调函数
不需要修改配置文件。