云服务器

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.ini
a. 打开 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是登录页面。任何操作必须先登录。

session.php主要是打印session数据,登录之后才可以看到的。

login.php

session.php

 

上一篇: 无

微信关注

获取更多技术咨询