首先检查是否安装了php redis扩展模块。比如:
yum install -y php70w-pecl-redis.x86_64
其次,检查php.ini的配置是否正确:
session.save_handler = redis session.save_path = tcp://172.17.0.2:6379 保存,重启php。并且使用phpinfo()查看生效的配置是否和你配置的一直。 有时/etc/php-fpm.d/www.conf中的配置选项也会捣乱。 最后,测试一下,写个php页面,如下:
session_start(); echo session_id(); 打开页面将会看到一串数字,比如: 2coilpflrv91kj9g2v8hdtl8d0 恭喜你成功了。 最好到redis里查看一下,保存的内容是否和上面显示的一直: 127.0.0.1:6379> keys * 1) "PHPREDIS_SESSION:hgqv40majveean53ukc9ujc9a2" 2) "PHPREDIS_SESSION:96ec523079664b2d11e1d05797aae125" 3) "PHPREDIS_SESSION:su7mem1civruvbb155ef5ic9r5" 4) "PHPREDIS_SESSION:2coilpflrv91kj9g2v8hdtl8d0" 最后一条和显示的结果相同。
我使用yum无法安装php70w-pecl-redis.x86_64啊,咋回事?
我发现redis保存session,很快就过期了。这是咋回事?
127.0.0.1:6379> ttl PHPREDIS_SESSION:1s4ghguqdnvrf6p6rcnssb6b81
(integer) 398
默认值是1440秒。在php.ini的控制参数为:
session.gc_maxlifetime=1440
修改为144000后重启php。可以看到如下:
127.0.0.1:6379> ttl PHPREDIS_SESSION:1s4ghguqdnvrf6p6rcnssb6b81
(integer) 143989
默认值改变了。
默认key的ttl都是永久的。比如:
127.0.0.1:6379> set mykey 12334
OK
127.0.0.1:6379> ttl mykey
(integer) -1
通过这种方式,多个前段web服务器,都把session保存到同一个redis中。也可以实现session会话保持功能。
当在不同的前段web服务器之间切换时,session id会被刷新,ttl值也会被刷新。
127.0.0.1:6379> ttl PHPREDIS_SESSION:1s4ghguqdnvrf6p6rcnssb6b81
(integer) 143707
刷新到另外一台web服务器后:
127.0.0.1:6379> ttl PHPREDIS_SESSION:1s4ghguqdnvrf6p6rcnssb6b81
(integer) 143999