ホームページ  >  記事  >  バックエンド開発  >  PHPですべてのセッションIDを取得するか、すべてのセッションを取得するにはどうすればよいですか?

PHPですべてのセッションIDを取得するか、すべてのセッションを取得するにはどうすればよいですか?

不言
不言オリジナル
2018-05-15 16:20:1315957ブラウズ

PHP ですべてのセッション ID を取得する方法、またはすべてのセッションを取得する方法: セッションの高度な使用法。セッションを memcache またはデータベースに書き込むことができ、ファイル システムによって駆動される場合は、[session_save_path()] を使用して取得できます。

PHPですべてのセッションIDを取得するか、すべてのセッションを取得するにはどうすればよいですか?

.php ファイルを通じてすべてのセッション ID を読み取りたいだけですか?それともすべてのセッションを取得しますか? ?

ディスカッションへの返信(解決策)

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

つまり。 1 人のユーザーだけでなく、すべてのユーザーを読み取ります。
たとえば、ユーザー A はリージョン A にログインして SESSIONID を生成します。ユーザー B はリージョン B にログインして SESSIONID を生成します。
同時に、すべてのユーザーはセッション データベース、またはセッション管理システムを必要とします。これまでの取り組みの結果が表示されます

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() によるセッション ファイルの場所。次に、各ファイルが順番に読み取られて逆シリアル化されます。

各ユーザーのセッション ID はファイルに対応します。このファイルは sess_ で始まり、ロックが設定されている場所に保存されます。

このようなことは機能しませんよね?
 session_save_path() 锁设定的位置。  

这类不行吧

将session.save_handler改成db,然后去读那个db。不过files也可以,那你就去读session.save_path session.save_handler を db に変更してから、その db を読み取ります。ただし、ファイルも利用できるので、session.save_path の下にあるファイルを読み取るだけです。

echo session_id()

すべてのセッション ID は、セッション ストレージ ディレクトリを介してのみ読み取ることができます。または、すべてのセッションをデータベースに保存できます。

関連トピックの推奨事項: phpセッション (写真、テキスト、ビデオ、ケースを含む)

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。