PHP中的$ _SESSION列表

时间:2009-08-08 04:52:41

标签: php

我想从localhost获取会话列表。所以我写了

session_start();
print_r($_SESSION);

目前访问者是两个人。另一个是来自另一台PC,最后一个是托管pc。但是只显示托管的pc会话。实际上我想得到所有会话用户列表。

5 个答案:

答案 0 :(得分:12)

使用以下代码可以轻松完成此操作:

<?php

$sessions = array();

$path = realpath(session_save_path());
$files = array_diff(scandir($path), array('.', '..'));

foreach ($files as $file)
{
    $sessions[$file] = unserialize(file_get_contents($path . '/' . $file));
}

echo '<pre>';
print_r($sessions);
echo '</pre>';

?>

确保您了解执行(或允许)此操作的风险。

答案 1 :(得分:4)

会话彼此隔离。一个用户的会话无权访问另一个用户的会话。变量$_SESSION仅引用当前用户的会话。

我认为没有办法访问不同用户的会话,除了找出会话文件在磁盘上的物理存储位置并手动解析它们。 请注意,这并不是您想要做的事情。

答案 2 :(得分:1)

我不确定你在问什么,但我认为你正在寻找另一个用户的另一个会话。如果是这种情况,那么我不推荐它,这是不可能的。会话对每个浏览器会话都是独立的(除非通过cookie另行指定)。

如果您要求从自己的用户从另一台计算机检索会话,那么再次,默认会话行为并不是真的要做到这一点。您需要实现自己的会话管理器,该管理器可能使用数据库并跟踪哪个用户的会话(可能是用户ID),以便可以将其加载到另一台计算机上。我不建议这样做,因为你说你正在进入另一个完整的蜡球。

如果您尝试跟踪用户登录和计算机之间的数据,我建议您使用用户设置表。在这里,您可以跟踪用户拥有的设置,并在每个会话甚至每个页面加载时加载它们,而无需修改会话处理程序。

如果您想从标题中获取当前活动会话的列表,则只需记录表中每个用户的最后一次点击时间并显示该数据,并在您认为会话处于非活动状态时设置一段时间。

答案 3 :(得分:1)

只要您知道要处理的会话的标识符,就可以这样做。这是一个具体的例子:

<?php
// Getting your own session id
$currentSessionId = session_id();

// Closing your own session
session_write_close();

// Switch to the session to handle
// Here, it is assumed that you pulled the session ID from a storage
session_id($sessionId);
session_start();

// Do whatever you want with the session ...

// Close the session once you finished to work with it
session_write_close();

// Restoring your own session session
session_id($currentSessionId);
session_start();

// At this point, you're back in your own session

答案 4 :(得分:0)

从session_save_path获取“ses_ *”文件是一个选项,但如果这些会话文件处于多级别:http://www.php.net/manual/en/session.configuration.php#ini.session.save-path 可能会出现问题。

最好是在每个session_start()之后,更新一个mysql表,其中第一列是session_id(),第二列是$ _SESSION的序列化数据