PHP session保存到redis,报错:session_start(): Cannot find save handler ‘redis’

首先检查是否安装了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"
最后一条和显示的结果相同。


PHP session保存到redis,报错:session_start(): Cannot find save handler ‘redis’》有6个想法

    1. 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
      默认值改变了。

    2. 默认key的ttl都是永久的。比如:
      127.0.0.1:6379> set mykey 12334
      OK
      127.0.0.1:6379> ttl mykey
      (integer) -1

  1. 通过这种方式,多个前段web服务器,都把session保存到同一个redis中。也可以实现session会话保持功能。

    1. 当在不同的前段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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注