Home  >  Article  >  Backend Development  >  php如何获取所有的sessionid或获取所有的session?

php如何获取所有的sessionid或获取所有的session?

不言
不言Original
2018-05-15 16:20:1315907browse

php获取所有的sessionid或获取所有的session的方法:session的高级用法,把session写到memcache或数据库里,就可以实现了,如果是以文件系统来驱动,你可以通过【session_save_path()】来获取。

php如何获取所有的sessionid或获取所有的session?

就是想通过一个.php文件读取所有的 sessionid ?或获取所有的session ??  

回复讨论(解决方案)

print_r($_SESSION);
print_r($_SESSION);

我的意思是。读取所有用户,不是单一个。  
比如A用户在A地区登陆产生一个SESSIONID  B用户在B地区登陆产生一个SESSIONID   
同时获取

所有的用户需要session数据库甚至一个session管理系统  
google一下,有前人努力的成果

session的高级用法,把session写到memcache或数据库里,就可以实现了

	class Session {		
	private static $handler=null;		
	private static $ip=null;		
	private static $lifetime=null;		
	private static $time=null;//初始化变量;		
	private static function init($handler){			
	self::$handler=$handler;			
	//$_SERVER["REMOTE_ADDR"]获取客户端路由地址;			
	self::$ip = !empty($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : 'unknown';			
	//ini_get()获取配置文件变量;			
	self::$lifetime=ini_get('session.gc_maxlifetime');			
	self::$time=time();		
	}		
	static function start(PDO $pdo){			
	self::init($pdo);			
	//_CLASS_  代表本类;			
	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($PHPSESSID){			
	$sql="select PHPSESSID, update_time, client_ip, data from session where PHPSESSID= ?";			
	$stmt=self::$handler->prepare($sql);			
	$stmt->execute(array($PHPSESSID));						
	if(!$result=$stmt->fetch(PDO::FETCH_ASSOC)){				
	return '';			
	}			
	if( self::$ip  != $result["client_ip"]){				
	self::destroy($PHPSESSID);				
	return '';			
	}			
	if(($result["update_time"] + self::$lifetime) prepare($sql);			
	$stmt->execute(array($PHPSESSID));			
	if($result=$stmt->fetch(PDO::FETCH_ASSOC)){				
	if($result['data'] != $data || self::$time > ($result['update_time']+30)){					
	$sql="update session set update_time = ?, data =? where PHPSESSID = ?";										
	$stm=self::$handler->prepare($sql);					
	$stm->execute(array(self::$time, $data, $PHPSESSID));								
	}			
	}else{				
	if(!empty($data)){					
	$sql="insert into session(PHPSESSID, update_time, client_ip, data) values(?,?,?,?)";					
	$sth=self::$handler->prepare($sql);					
	$sth->execute(array($PHPSESSID, self::$time, self::$ip, $data));				
	}			
	}			
	return true;		
	}		
	public static function destroy($PHPSESSID){			
	$sql="delete from session where PHPSESSID = ?";			
	$stmt=self::$handler->prepare($sql);			
	$stmt->execute(array($PHPSESSID));			
	return true;		
	}		
	private static function gc($lifetime){			
	$sql = "delete from session where update_time prepare($sql);			
	$stmt->execute(array(self::$time-$lifetime));			
	return true;		
	}		
	}	
	try{		
	$pdo=new PDO("mysql:host=localhost;dbname=xsphpdb", "root", "123456");	
	}catch(PDOException $e){		
	echo $e->getMessage();	}	
	Session::start($pdo);

用这个类

默认的,如果是以文件系统来驱动,你可以通过 session_save_path() 来获取session文件的存储位置。然后依次读取每个文件并反序列化。  
每个用户的session id对应一个文件,这个文件以 sess_ 开头,存储在 session_save_path() 锁设定的位置。  

这类不行吧

将session.save_handler改成db,然后去读那个db。不过files也可以,那你就去读session.save_path下的文件吧。

echo session_id()

所有的sessionid只能通过session的存储目录来读取的,或者将所有session保存在数据库。

相关专题推荐php session (包含图文、视频、案例)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:向xuzuning请教Next article:preg_match正则基础题