首先修改 php.ini文件
session.save_handler = redis
session.save_path = “tcp://127.0.0.1:6379”
测试实例,通过redis取值
//设置一个key
$_SESSION['hq'] = 123;
//连接redis
$redis = new \redis();
$redis->connect('127.0.0.1', 6379);
// redis 用 session_id 作为 key 并且是以 string 的形式存储
$res = $redis->get('PHPREDIS_SESSION:' . session_id());
//用|分割string 可能是 hq|i:123; 或者 hq|i:1|2|3;
$res1 = explode('|',$res); //如果值里面有|,将会分割出多个数组,key里面有|就会bug
$res2 = explode($res1[0].'|',$res); //将key与| 再次分割
$res3 = [$res1[0] => unserialize($res2[1])]; //反序列化value
dump($res3); //输出结果 ['hq'] => 123
dump($_SESSION); //输出结果 ['hq'] => 123
在服务器上查看redis的keys
127.0.0.1:6379> KEYS *
1) "PHPREDIS_SESSION:trb0eeunge9ojpesak99851803"
总结:
搞清楚session的存储原理,拿 $_SESSION[‘hq’] = 123; 举例,存储的结果为 hq|i:123;
应该就是将key用单竖线| + values序列化过后的值。
知道了session存储的格式,就可以将保存的值直接解析出来用了。
正因为session的保存方式是通过单竖线拼接的,所以如果在key里面带有单竖线 | 那么session将不会保存,不知道算不算bug。
没有看session存储的过程源码,自己测试出来的。