yii2 redis 无法存放 session

joson_chan 发布于 2015/10/17 16:03
阅读 3K+
收藏 0
1 问题:如标题所描述
2 配置:在main.php中配置好使用redis作为session存储介质之后并不能使用,下面是配置
        'cache' => [
            'class' => 'yii\redis\Cache',
            'redis' => [
                'hostname' => 'localhost',
                'port' => 6379,
                'database' => 0,
            ],
        ],
        'session' => [
            'class' => 'yii\redis\Session',
            'redis' => [
                'hostname' => 'localhost',
                'port' => 6379,
                'database' => 1,
            ],
        ],
3 使用:在controller里面用这样的方式缓存到redis:
  Yii::$app->cache->set("test1", "123");//成功
  Yii::$app->session->set('test1', '456');//失败
   第一种的cache方式可以正常存储,但是下面的session方式就不行了,执行之后没有任何提示,我查看了yiisoft/yii2-redis拓展的Session.php源代码之后发现里面并没有覆写set方法,当我在controller中调用Yii::$app->session->set的时候,其实是调用的其父类yii\web\Session的set方法,而这个set方法的源代码其实是这样的:
public function set($key, $value)
{
     $this->open();
     $_SESSION[$key] = $value;
}
也就是说,它根本就没有去用redis来存放session信息,还是用的$_SESSION来存放信息的。

4 跪求解决方案
加载中
1
游走的鱼

你对PHP 的session 机制还是不够理解啊

http://php.net/manual/zh/function.session-set-save-handler.php

那个redis session 已经重写readSession writeSession destroySession 这些方法了

yii 把这几个方法通过session_set_save_handler  注册了

Yii::$app->cache->set("test1", "123") 是有返回值的

Yii::$app->session->set('test1', '456') 木有返回值的

j
joson_chan
万分感谢!终于明白了这个中缘由!
2
南湖船老大
南湖船老大
其实php修改session存储机制不需要动代码的,php.ini配置文件一改就好,支持多个redis,支持权重
j
joson_chan
谢谢回答,是的,照你说的这样试了,确实可行。
返回顶部
顶部