阅读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