/**
* session数据保存到memcache中
* 使用session_set_save_handler 函数
* php.ini 设置
* 默认为session.save_handler = files,必须将其修改为session.save_handler = user,即变为用户自定义方式。
*/
class SessionMemcache {
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"),
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;
}
public static function read($id){
$out=self::$handler->get(self::session_key($id));
if($out===false || $out == null)
return '';
return $out;
}
public static function write($id, $data){
$method=$data ? 'set' :'replace';
return self::$handler->$method(self::session_key($id),$data, MEMCACHE_COMPRESSED, self::$lifetime);
}
public static function destroy($id){
return self::$handler->delete(self::session_key($id));
}
public static function gc($lifetime){
return true;
}
private static function session_key($id){
$session_key=self::NS.$id;
return $session_key;
}
}
$memcache=new Memcache();
$memcache->connect("localhost", 11211)or die("不能连接memcache");
SessionMemcache::start($memcache);
调用文件1 memcache1.php
include 'SessionMemcache.class.php';
$_SESSION["islogin3"] = 1;
$_SESSION["username"] = "admin";
$_SESSION["uid"] = 333;
echo session_name().'='.session_id()."<br>";
echo time();
调用文件2 memcache2.php
include 'SessionMemcache.class.php';
print_r($_SESSION);
echo "<br>";
echo session_name().'='.session_id()."<br>";
echo time();
调用文件3 memcache3.php
include 'SessionMemcache.class.php';
$_SESSION = array();
if (isset($_COOKIE[session_name()])){
setcookie(session_name(), '' , time()-100, '/');
}
session_destroy();
echo session_name().'='.session_id()."<br>";