session共用

<?php
if(!defined('APP_PATH')||!defined('DOYO_PATH')){exit('Access Denied');}
class sysession{
	private $session_Overdue;
	private $session_dir;
	private $sessionidname;
	public function __construct(){
		$this->session_Overdue=3600;
		$this->session_dir=$GLOBALS['G_DY']['sp_session'].'/';
		ini_set('session.save_handler','user');
		session_set_save_handler ( 
			array ($this, 'open' ), 
			array ($this, 'close' ), 
			array ($this, 'read' ), 
			array ($this, 'write' ), 
			array ($this, 'destroy' ), 
			array ($this, 'gc' )
		);

	$this->sessionidname = userBrowser();	
  	if (isset($_COOKIE[$this->sessionidname])) {
  		$sessionid = $_COOKIE[$this->sessionidname];	
  	}else{
  		$expire=time()+60*60*24*1;
	  	$sessionid = rand(201,2000).''.time().''.rand(1,200);
	   	setcookie($this->sessionidname,$sessionid , $expire);
	}

		if($_REQUEST['session_id']){if(preg_match("/^[a-zA-Z0-9]*$/", $_REQUEST['session_id']) != 0){
			session_id($_REQUEST['session_id']);}}else{
				session_id($sessionid);
			}
		session_start();
    }
    public function getid(){
    	return $_COOKIE[$this->sessionidname];
    }
	public function open(){
		return true;
	}
	public function close(){
		return true;
	}
	public function read($id=null){
		if ($id == null) {
			$id = $this->getid();
		}
		$value = $this->sessdb('r',$id);
		if($value){
			return $value['datas'];
		}else{
			return '';
		}
	}
	public function write($id= null,$datas,$who = ''){
		 
		if($who != 'admin'){ return 'error';}
		if ($id == null) {
			$id = $this->getid();
		}
		$ses=array('datas'=>$datas);
		$this->sessdb('w',$id,$ses,$this->session_Overdue,$who);
		return true;
	}
	public function destroy($id){
		$this->sessdel();
		return $this->sessdb('c',$id);
	}
	public function gc($max){
		$this->sessdel();
		return true;
	}
    public function __destruct(){  
		$this->sessdel(); 
	} 

	private function sessdb($method, $name, $value = NULL, $life_time = -1,$who){
		$filedir=$this->session_dir;
		if(!is_dir($filedir))__mkdirs($filedir);
		$sfile = $filedir.'/'.$name.".php";
		if('w' == $method){ 
			$life_time = ( -1 == $life_time ) ? '300000000' : $life_time;
			/*$value = '<?php die();?>'.( time() + $life_time ).serialize($value);
			//var_dump($value);
			var_dump($who);
			var_dump($value['datas']['id']);*/
			$value = '<?php die();?>'.( time() + $life_time ).json_encode($value);
			
			$res = file_put_contents($sfile, $value);
			 
			 return $res;
		}elseif('c' == $method){
			return @unlink($sfile);
		}else{
			return $this->sesstime($sfile);
		}
	}
	private function sessdel() { 
		$dirName=@opendir($this->session_dir);
		while(($file = @readdir($dirName)) !== false){
			if($file!='.' && $file!='..'){
				$this->sesstime($this->session_dir.'/'.$file);
			}
		}
		closedir($dirName);
	}

 
 
	private function sesstime($sfile){
		if( !is_readable($sfile) )return false;
		$arg_data = file_get_contents($sfile);
		

		if( substr($arg_data, 14, 10) < time() ){
			@unlink($sfile); 
			return false;
		}
		// $str = substr($arg_data, 24);
		// $data = json_decode($str,true);
		// //var_dump($data['datas']);exit();
		// var_dump($data->datas);exit();
		return json_decode(substr($arg_data, 24),true);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值