【问题标题】:$_SESSION List in PHPPHP 中的 $_SESSION 列表
【发布时间】:2010-11-17 21:27:29
【问题描述】:

我想从本地主机获取会话列表。所以,我写了

session_start();
print_r($_SESSION);

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

【问题讨论】:

  • 类似的问题和答案在这里可用:stackoverflow.com/questions/675913/…
  • 我同意受访者的普遍心态。听起来您正在寻找的是一种不同的技术。我可以推荐网络套接字吗?

标签: php


【解决方案1】:

这可以通过以下代码轻松完成:

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

?>

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

【讨论】:

  • 如果会话文件是多级的怎么办:php.net/manual/en/…
  • @PaulDinh: True... 然后你需要递归地映射文件,可能使用RecursiveDirectoryIterator SPL 迭代器或类似的。 =)
【解决方案2】:

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

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

【讨论】:

  • 如何获取所有会话?不知何故?
【解决方案3】:

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

<?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】:

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

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

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

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多