Nginx+Redis实现反向代理和Session共享(二)
2017-06-23 10:58:30 0
Session在PHP默认存放形式
1.PHP处理Session默认是创建会话数据文件,以文件的形式存储会话信息;2.通过查看
<?php echo phpinfo();
得知,Session的存放路径:session.save_path = /var/lib/php/session
文件形式存放Session的劣势:
1.如果用户数量非常大,文件操作的I/O开销就会很大,会严重影响系统的执行效率。2.如果多个系统直通之间需要共享session数据,而且系统之间是在不同的服务器上的,那文件存放方式就不可以实现这样的需求了。
Session的其他存放形式
1.Session可以用数据库、NFS或SAMBA、Redis、memcached进行session的存放。 2.当然最优的方式还是使用Nosql中的Redis或者memcached这种键值(Key-Value)存储数据库存放最合适不过了。
Redis存放Session
PHP默认就支持保存session到redis,不需任何额外代码。修改php配置,总共有3种方法,如下选择其中一种即可:
修改php.inia. 打开 php.ini 文件,设置下面两个值: session.save_handler = redis session.save_path = "tcp://127.0.0.1:6379" b. 如果Redis有密码,用下面的配置: session.save_path = "tcp://127.0.0.1:6379?auth=password" c. 配置完成后,重启PHP服务
配置完成后,重启PHP-FPM (以PHP-FPM形式启动)a. PHP-FPM的配置文件/etc/php-fpm.conf或者/etc/php-fpm.d/*.conf中,也有session的配置。 而且它们的session配置优先级比php.ini高,会覆盖php.ini中的配置。所以,也直接在这里面改: php_value[session.save_handler] = redis php_value[session.save_path] = "tcp://127.0.0.1:6379" c. 如果用php.ini的配置,则需要把这两行用;注释掉。避免出现优先级问题 d. 然后重启PHP-FPM。
代码添加方式ini_set('session.save_handler', 'redis'); ini_set('session.save_path', 'tcp://127.0.0.1:6379');
案例测试
1.下面案例是使用代码添加方式在Redis存放SESSION。2.文件说明:
login.php是登录页面。任何操作必须先登录。login.phpsession.php主要是打印session数据,登录之后才可以看到的。
session.php