$\ PHP中的会话列表

$\ PHP中的会话列表,php,Php,我想从本地主机获取会话列表 session_start(); print_r($_SESSION); 当前access person是两个。一个来自另一台PC,最后一个来自托管PC。但屏幕上显示的仅是托管PC会话。实际上,我想获取所有会话用户列表。会话彼此隔离。一个用户的会话无法访问另一个用户的会话。变量$\u SESSION仅引用当前用户的会话 我认为除了找出会话文件物理存储在磁盘上的位置并手动解析它们之外,没有其他方法可以访问其他用户的会话请注意,这通常不是您想要做的事情。我不确定您在问什

我想从本地主机获取会话列表

session_start();
print_r($_SESSION);

当前access person是两个。一个来自另一台PC,最后一个来自托管PC。但屏幕上显示的仅是托管PC会话。实际上,我想获取所有会话用户列表。

会话彼此隔离。一个用户的会话无法访问另一个用户的会话。变量
$\u SESSION
仅引用当前用户的会话


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

我不确定您在问什么,但我认为您希望从另一个用户那里获得另一个会话。如果是这样的话,我就不推荐了,而且也不太可能。会话对于每个浏览器会话都是单独的(除非通过cookie另行指定)

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

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


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

可以很容易地用以下代码完成:

<?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>';

?>

确保您了解这样做(或允许这样做)的风险。

从会话保存路径获取“ses”*“文件是一种选择,但如果这些会话文件处于多级: 可能会出现问题


最好的方法是在每次session_start()之后更新一个mysql表,该表的第一列是session_id(),第二列是$_session的序列化数据,只要您知道要处理的会话的标识符,这是可能的。以下是一个具体的例子:


如何使获取所有会话?有什么办法吗?这里有类似的问题和提问者:我同意受访者的一般心态。听起来你想要的是一种不同的技术。我建议使用web套接字。如果会话文件处于多个级别,该怎么办:@PaulDinh:True。。。然后,可能需要使用
recursivedirectoryinterator
SPL迭代器或类似工具递归映射文件很好地解释了如何解决问题。
<?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