将session信息写入到memcache中管理

来源:互联网 发布:专业摩托车导航软件 编辑:程序博客网 时间:2024/05/02 02:35

最近在学习高级会话:

一、学习了用cookie模拟用户登录注册退出流程,信息写入$_COOKIE数组,依赖于客户端浏览器,安全性也低

二、又学习了session模拟用户登录注册退出流程,信息写入$_SESSION数组,保存在服务器端。

但是基于session技术:又有多种方式,

1)基于cookie的,让客户端浏览器用cookie方式记住session_id,实现

2)基于url的,让地址栏上每一刻都记录着session_id,(可以用变量记住,也可以用SID,也是多种方式),即客户浏览器禁用cookie的情况下。

三、再有就是session服务器端的管理

主要就是围绕这个扩展在动 session.save_handler = files/user/memcache

1)保存到文件,可以是系统默认的方式,不用改配置文件任何地方。也可以是自定义的(上面改成user),重写session.save_handler(其中又包含6个方法)

2)保存到数据库中。上面的配置改成user,重写session.save_handler(其中又包含6个方法)

3)保存到memcache中,这种是最快最优的保存方式,同上,配置改成user,重写session.save_handler(其中又包含6个方法)

保存到memcache这种情况,也可以用系统自带的,需要改配置:

session.save_handler = memcache

session.save_path = "tcp://localhost:11211"  ;这个地方写成这样就是直接写入memcache数据库,多个服务器,用逗号隔开

然后,这种情况就不用重写session.save_handler了。

上面的这三种方式,本博客里,都有实现,可以看看相关内容。

 

这篇是将session信息保存到memcache中,session.save_handler = user 的情况。 初学者,问题可能还有很多,多多指出。

 

<?php/***将信息写入到Memcache中管理***/class MemSession {    private static $handler = null;  //数据库连接    private static $lifetime = null; //垃圾回收时间    private static $time = null;     //当前时间    const NS ='session_';            //    //初始化,给变量附上值    private static function init($handler){        self::$handler = $handler;        self::$lifetime = ini_get('session.gc_maxlifetime');                 self::$time=time();    }    public static function start(Memcache $memcache){        self::init($memcache);        session_set_save_handler(      //回调函数            array(__CLASS__,'open'),   //调用本类的open方法              array(__CLASS__,'close'),            array(__CLASS__,'read'),            array(__CLASS__,'write'),            array(__CLASS__,'destroy'),            array(__CLASS__,'gc')        );        session_start();    }        public static function open($path,$name){        return true;    }    public static function close(){        return true;    }    //从memcache中读取    public static function read($PHPSESSID){        $out=self::$handler->get(self::session_key($PHPSESSID));        if($out === false || $out == null)            return '';        return $out;    }    //写入memcache中    public static function write($PHPSESSID,$data){        $method =$data?'set':'replace';       return self::$handler->$method(self::session_key($PHPSESSID),$data,MEMCACHE_COMPRESSED,self::$lifetime);    }    public static function destroy($PHPSESSID){        return self::$handler->delete(self::session_key($PHPSESSID));    }    public static function gc($lifetime){        return true;    }    //拼凑session_id,在前面加上前缀    public static function session_key($PHPSESSID){        $session_key = self::NS.$PHPSESSID ; //设置session键        return $session_key;    }    }$memcache = new Memcache();//连接mem数据库$memcache->connect('localhost',11211) or exit("could not connect!");//开启服务MemSession::start($memcache);?>


 

原创粉丝点击