欢迎投稿

今日深度:

php将session保存在redis中,phpsessionredis

php将session保存在redis中,phpsessionredis


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

www.htsjk.Com true http://www.htsjk.com/redis/28558.html NewsArticle php将session保存在redis中,phpsessionredis 首先修改 php.ini文件 session.save_handler = redis session.save_path = “tcp://127.0.0.1:6379” 测试实例,通过redis取值 //设置一个key $_SESSION [ 'hq' ] = 123 ; //连接re...
相关文章
    暂无相关文章
评论暂时关闭