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

weeetcom 2012-12-31 07:56:05


就是想通过一个.php文件读取所有的 sessionid ?或获取所有的session ??
...全文
3541 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿不阿 2014-03-13
  • 打赏
  • 举报
回复
所有的sessionid只能通过session的存储目录来读取的,或者将所有session保存在数据库。
码无边 2013-01-03
  • 打赏
  • 举报
回复
echo session_id()
an9ryfr09 2013-01-01
  • 打赏
  • 举报
回复
将session.save_handler改成db,然后去读那个db。不过files也可以,那你就去读session.save_path下的文件吧。
ImN1 2012-12-31
  • 打赏
  • 举报
回复
所有的用户需要session数据库甚至一个session管理系统 google一下,有前人努力的成果
weeetcom 2012-12-31
  • 打赏
  • 举报
回复
引用 2 楼 jordan102 的回复:
print_r($_SESSION);
我的意思是。读取所有用户,不是单一个。 比如A用户在A地区登陆产生一个SESSIONID B用户在B地区登陆产生一个SESSIONID 同时获取
一起混吧 2012-12-31
  • 打赏
  • 举报
回复
print_r($_SESSION);
zsyok 2012-12-31
  • 打赏
  • 举报
回复
怎么没人回呢??
xdefee 2012-12-31
  • 打赏
  • 举报
回复
这类不行吧
改一下昵称 2012-12-31
  • 打赏
  • 举报
回复
默认的,如果是以文件系统来驱动,你可以通过 session_save_path() 来获取session文件的存储位置。然后依次读取每个文件并反序列化。 每个用户的session id对应一个文件,这个文件以 sess_ 开头,存储在 session_save_path() 锁设定的位置。
夜刃羽狸 2012-12-31
  • 打赏
  • 举报
回复
	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) < self::$time ){
				self::destroy($PHPSESSID);
				return '';
			}

			return $result['data'];

		}

		public static function write($PHPSESSID, $data){
			$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)){
				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 < ?";

			$stmt=self::$handler->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);
用这个类
夜刃羽狸 2012-12-31
  • 打赏
  • 举报
回复
session的高级用法,把session写到memcache或数据库里,就可以实现了

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧