阅读PHP会话而不实际启动它

我正在寻找一种方法来阅读PHP会话的内容,而不实际替换当前请求的运行会话。

比方说,我有一个正在运行的会话(以session_start()开始,使用默认会话处理程序和PHPSESSID cookie给出的session_id)现在我有另一个(有效)session_id,我想读取存储在该会话中的一些数据。

我能想到的唯一方法是用$ oldSession = session_id()替换当前会话,使用session_id($ newId)设置新会话,然后从$ _SESSION读取数据,然后使用session_id重新启动原始会话($ oldSession ) - 可能涉及session_commit()和session_start()的一些辅助调用。

但我更喜欢不触及当前的运行会话......

PHP 5.4引入了SessionHandler类(http://php.net/manual/de/class.sessionhandler.php),但手动调用$ SessionHandler-> read似乎也不工作

$handler = new SessionHandler();
var_dump($handler->read($session));

//Fatal error: SessionHandler::read(): Cannot call default session handler

我正在使用本机php memcached会话处理程序

谢谢你的任何提示!


我通过直接从memcached读取会话数据解决了这个问题。

代码基于来自http://php.net/manual/de/memcached.sessions.php的评论

$session = 'session_id_to_read';
$servers = explode(',', ini_get('session.save_path'));
$c = count($servers);
for ($i = 0; $i < $c; ++$i) {
    $servers[$i] = explode(':', $servers[$i]);
}

$memcached = new Memcached();
$memcached->addServers($servers);
$sessionPrefix = ini_get('memcached.sess_prefix');
$rawData = $memcached->get($sessionPrefix.$session);
$data = $rawData ? unserialize($rawData) : false;

请注意,反序列化($ rawData)仅在session.serialize_handler设置为'php_serialize'

链接地址: http://www.djcxy.com/p/60241.html

上一篇: Read PHP Session without actually starting it

下一篇: SERVER['HTTP