首页 > 后端开发 > php教程 > php如何获取所有的sessionid或获取所有的session?

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

不言
发布: 2023-02-28 16:54:01
原创
16031 人浏览过

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 (包含图文、视频、案例)

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板