php将session保存在redis中

1 篇文章 0 订阅

首先修改 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存储的过程源码,自己测试出来的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值