session数据保存到memcache中

/**
 * 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>";









  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值