就是想通過一個.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儲存在資料庫。