将Session数据自动存储在Memcache缓存器中

流氓凡 PHP程序源码 2019-11-07 4.27 K 0

我们需要定义一个类,用于自动加载调用memcache缓存器同时将设置的session所有值存储在memcac缓存器中,并且session销毁的时候也会自动清除memcache缓存。

安装memcache缓存服务器

主要使用session_set_save_handler()函数

class MemcacheUser{
    //定义属性,用于存储memcache系统对象
    public static $obj;
    //定义属性,用于存储获取在php.ini配置文件中的session最大生命周期值
    public static $MaxSessionTime;
    //初始化类方法
    public static function init($mem){
        self::$obj=$mem;
        self::$MaxSessionTime=init_get('session.gc_maxlifetime');    //获取php.ini中的session属性值,默认1440秒
    }
    //定义启动类方法
    public static function start($mem){
        self::init($mem);
        session_set_save_handler(
            //这个函数有6个参数,都是回调函数,且需要自己定义函数
            array(__CLASS__,'open'),
            array(__CLASS__,'close'),
            array(__CLASS__,'read'),
            array(__CLASS__,'write'),
            array(__CLASS__,'destroy'),
            array(__CLASS__,'gc')
        );
    }
    
    //准备自定义回调函数
    //定义参数1的回调函数open:当session_start()开启的时候自动调用
    public static function open($session_path,$session_name){
        return true;
    }
    //定义参数2的回调函数close:当关闭session时自动调用
    public static function close(){
        return true;
    }
    //定义参数3的回调函数read:当memcache中读session数据时自动调用
    public static function read($id){
        $data=self::$obj->get($id);
        return $data;
    }
    //定义参数4的回调函数write:当session中信号写入memcache中自动调用
    public static function write($id,$data){
        self::$obj->add($id,$data,MEMCACHE_COMPRESSED,self::$MaxSessionTime);
        return true;
    }
    //定义参数5的回调函数destroy:当session销毁时候自动调用
    public static function destroy($id){
        self::$obj->delete($id);
    }
    //定义参数6的回调函数gc:自动回收垃圾
    public static function gc(){
        return true;
    }

}
//获取系统memcache对象
$memcache=new Memcache();
$memcache->connect('127.0.0.1',11211);
//将对象传到类并自动调用
MemcacheUser::start($memcache);

使用注意事项:

    引入类文件必须在session_start()的上边引入!!


评论