thinkphp3.2 session存到redis的方法

来源:互联网 发布:永久封的淘宝店能解吗 编辑:程序博客网 时间:2024/06/15 16:17

有两种方法

第一种:通过php.ini配置

在session_start()之前增加如下代码:

ini_set('session.save_handler', 'redis');ini_set('session.save_path', 'tcp://127.0.0.1:6379');

或者修改php.ini这两处为上面的值重启服务即可

第二种:通过session_set_save_handler函数

根据官方手册session驱动增加下面的驱动文件

<?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: liu21st <liu21st@gmail.com>// +----------------------------------------------------------------------namespace Think\Session\Driver;// use think\Exception;class Redis implements \SessionHandlerInterface{    /** @var \Redis */    protected $handler = null;    protected $config  = [        'host'         => '127.0.0.1', // redis主机        'port'         => 6379, // redis端口        'password'     => '', // 密码        'select'       => 0, // 操作库        'expire'       => 3600, // 有效期(秒)        'timeout'      => 0, // 超时时间(秒)        'persistent'   => true, // 是否长连接        'session_name' => 'session_', // sessionkey前缀    ];     public function __construct($config = [])     {         $this->config['host'] = C("SESSION_REDIS_HOST") ? C("SESSION_REDIS_HOST") : $this->config['host'];         $this->config['port'] = C("SESSION_REDIS_POST") ? C("SESSION_REDIS_POST") : $this->config['port'];         $this->config['password'] = C("SESSION_REDIS_PSW") ? C("SESSION_REDIS_PSW") : $this->config['password'];         $this->config['select'] = C("SESSION_REDIS_SELECT") ? C("SESSION_REDIS_SELECT") : $this->config['select'];         $this->config['expire'] = C("SESSION_REDIS_EXPIRE") ? C("SESSION_REDIS_EXPIRE") : $this->config['expire'];         $this->config['expire'] = C("SESSION_REDIS_EXPIRE") ? C("SESSION_REDIS_EXPIRE") : $this->config['expire'];         $this->config['session_name'] = C('SESSION_PREFIX') ? C('SESSION_PREFIX') : $this->config['session_name'];     }    /**     * 打开Session     * @access public     * @param string $savePath     * @param mixed  $sessName     * @return bool     * @throws Exception     */    public function open($savePath, $sessName)    {        // 检测php环境        if (!extension_loaded('redis')) {            // throw new Exception('not support:redis');            echo 'not support:redis';        }        $this->handler = new \Redis;        // 建立连接        $func = $this->config['persistent'] ? 'pconnect' : 'connect';        $this->handler->$func($this->config['host'], $this->config['port'], $this->config['timeout']);        if ('' != $this->config['password']) {            $this->handler->auth($this->config['password']);        }        if (0 != $this->config['select']) {            $this->handler->select($this->config['select']);        }        // var_dump($this->handler->get('array_category'));        return true;    }    /**     * 关闭Session     * @access public     */    public function close()    {        $this->gc(ini_get('session.gc_maxlifetime'));        $this->handler->close();        $this->handler = null;        return true;    }    /**     * 读取Session     * @access public     * @param string $sessID     * @return string     */    public function read($sessID)    {        return (string) $this->handler->get($this->config['session_name'] . $sessID);    }    /**     * 写入Session     * @access public     * @param string $sessID     * @param String $sessData     * @return bool     */    public function write($sessID, $sessData)    {        if ($this->config['expire'] > 0) {            return $this->handler->setex($this->config['session_name'] . $sessID, $this->config['expire'], $sessData);        } else {            return $this->handler->set($this->config['session_name'] . $sessID, $sessData);        }    }    /**     * 删除Session     * @access public     * @param string $sessID     * @return bool     */    public function destroy($sessID)    {        return $this->handler->delete($this->config['session_name'] . $sessID) > 0;    }    /**     * Session 垃圾回收     * @access public     * @param string $sessMaxLifeTime     * @return bool     */    public function gc($sessMaxLifeTime)    {        return true;    }}

然后修改框架的common\session函数

/** * session管理函数 * @param string|array $name session名称 如果为数组则表示进行session设置 * @param mixed $value session值 * @return mixed */function session($name='',$value='') {    $prefix   =  C('SESSION_PREFIX');    if(is_array($name)) { // session初始化 在session_start 之前调用        if(isset($name['prefix'])) C('SESSION_PREFIX',$name['prefix']);        if(C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])){            session_id($_REQUEST[C('VAR_SESSION_ID')]);        }elseif(isset($name['id'])) {            session_id($name['id']);        }        if('common' == APP_MODE){ // 其它模式可能不支持            ini_set('session.auto_start', 0);        }        if(isset($name['name']))            session_name($name['name']);        if(isset($name['path']))            session_save_path($name['path']);        if(isset($name['domain']))          ini_set('session.cookie_domain', $name['domain']);        if(isset($name['expire']))          {            ini_set('session.gc_maxlifetime',   $name['expire']);            ini_set('session.cookie_lifetime',  $name['expire']);        }        if(isset($name['use_trans_sid']))   ini_set('session.use_trans_sid', $name['use_trans_sid']?1:0);        if(isset($name['use_cookies']))     ini_set('session.use_cookies', $name['use_cookies']?1:0);        if(isset($name['cache_limiter']))   session_cache_limiter($name['cache_limiter']);        if(isset($name['cache_expire']))    session_cache_expire($name['cache_expire']);        if(isset($name['type']))            C('SESSION_TYPE',$name['type']);        if(C('SESSION_TYPE')) { // 读取session驱动            $type   =   C('SESSION_TYPE');            $class  =   strpos($type,'\\')? $type : 'Think\\Session\\Driver\\'. ucwords(strtolower($type));            $hander =   new $class();            //注释掉源码//            session_set_save_handler(//                array(&$hander,"open"),//                array(&$hander,"close"),//                array(&$hander,"read"),//                array(&$hander,"write"),//                array(&$hander,"destroy"),//                array(&$hander,"gc"));            //这样使用            session_set_save_handler($hander,true);        }        // 启动session        if(C('SESSION_AUTO_START'))  session_start();    }elseif('' === $value){

优劣分析:

配置文件的方式快速简单,但是不够灵活,也无法在刷新页面的时候自动刷新过期时间,驱动方式改的多但是很灵活,可以自由修改各种配置参数,可以自动刷新过期时间

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 闽侯五中 闽侯教育网 闽侯招聘 闽侯吧 闽侯招聘网 福建闽侯 闽侯房产备案系统 闽侯备案系统 福州闽侯邮编 闽侯白沙湾一日游 闽候 闽剧全集 闽剧傻子娶亲 福卅闽剧 福建省实验闽剧全集 福州闽剧一团全集 闽剧全集包公 闽剧下载 闽剧甘国宝 福州闽剧全集 福建闽剧全集 闽北论坛 闽北 闽北是哪里 闽北乌龙茶 闽北职业技术学院 闽北互动论坛招聘 闽北互动求职招聘 闽北论坛招聘 南平闽北互动论坛招聘 闽北职业技术学院宿舍 闽北互动论坛手机版 闽北技术学院 闽北日报登报 闽北职业技术学院地址 闽南语 闽南师范 闽南 闽南歌 闽南话 手机闽南网