tp3.2session写入mysql数据库

1、将PHP的配制文件PHP.ini中session.save_handler="files"改写为session.save_handler="user";

2、创建数据库数据表;

3、添加如下类文件,并定义open、read、write、close、destory、gc等方法;

class FileSessionHandler {

    //put your code here
    public $lifetime = 1800; // 有效期,单位:秒(s),默认30分钟
    public function __construct() {
        session_set_save_handler(
            array(&$this, 'open'),      // 在运行session_start()时执行
            array(&$this, 'close'),     // 在脚本执行完成 或 调用session_write_close() 或 session_destroy()时被执行,即在所有session操作完后被执行
            array(&$this, 'read'),      // 在运行session_start()时执行,因为在session_start时,会去read当前session数据
            array(&$this, 'write'),     // 此方法在脚本结束和使用session_write_close()强制提交SESSION数据时执行
            array(&$this, 'destroy'),   // 在运行session_destroy()时执行
            array(&$this, 'gc')         // 执行概率由session.gc_probability 和 session.gc_divisor的值决定,时机是在open,read之后,session_start会相继执行open,read和gc
        );
        register_shutdown_function('session_write_close');//这一行必须写在session_start之前
         session_start(); // 这也是必须的,打开session,必须在session_set_save_handler后面执行
    }
    
    public function open($save_path='',$sesssion_name='') {
        return TRUE;
    }
    
    public function read($session_id) {
        $res = M('Session')->where(['session_id'=>$session_id])->find();
        if($res){
            return $res['session_str'];
        }
        return '';
    }
    
    public function write($session_id,$data) {
        $add_data = array(
            'session_id'=>$session_id,
            'session_str'=>$data,
            'upd'=> time()
        );
         $info = M('Session')->where(['session_id'=>$session_id])->find();
         if(!$info){
            M('Session')->add($add_data);
            return ;
         } else {
            M('Session')->save($add_data);
            return;
         }
    }
    
    public function close() {
         return $this->gc($this->lifetime);
    }
    public function destroy($session_id) {
        return M('Session')->where(['session_id'=>$session_id])->delete();
    }
    public function gc($life_time) {
        $expire_time = time()->$life_time;
        $map['upd'] = array('lt',$expire_time);
        return  M('Session')->where($map)->delete();

    }

4、调用方法(不能用tp框架封装的session()方法,必须用原生的$_SESSION)

public function tt_test() {
        $handler = new FileSessionHandler();
      $_SESSION['user']="asdasdasdasd";
        dump($_SESSION);
    }

你可能感兴趣的:(tp3.2session写入mysql数据库)