一尘不染

用PHP遍历服务器的所有会话

php

PHP中有没有一种方法可以获取服务器上所有会话的列表(以及每个会话中的变量)?

基本上,我们具有维护功能,该功能需要知道当前哪些用户登录到该站点。我们已经在会话变量中存储了每个用户的数据,但是我希望可以遍历每个会话并提取所需的数据。

我的PHP非常有限(我通常是.NET开发人员),但是如果有人知道这样做是否可行(以及如何做到),我将不胜感激。我用谷歌搜索,发现的结果倾向于表明这是不可能的,但是我发现这很难接受。

不过,如果不能,但是我认为我在StackOverflow上的伙伴可以给我一个明确的答案!


阅读 255

收藏
2020-05-29

共1个答案

一尘不染

PHP将每个用户的会话数据存储在服务器上的临时文件夹中。该文件夹在php.ini配置文件中的session.save_path变量下定义。从您的php.ini文件中找到此值,或者使用以下方法创建一个php文件:

<?php echo "Session Save Path: " . ini_get( 'session.save_path');?>

内容,然后在浏览器中打开文件。

找到会话数据的保存路径后,打开该文件夹,您会注意到一个相当简单的结构。所有会话均以以下格式存储:sess_ $ SESSIONID。

会话数据在存储到磁盘之前先进行序列化。这样,存储在会话文件中的对象在使用之前必须进行反序列化。但是,如果您使用的是按原样存储的纯文本来存储会话数据(例如$_SESSION['userid'] = 1234)以存储有关用户的信息,那么应该足够容易地从内部解析出您要查找的数据文件。

还有一件事……我还没有研究它,但是看起来好像文件名中出现的会话ID直接对应于例如存储在用户计算机上的PHPSESSID
cookie的名称。因此,考虑到这一点,可能可以遍历临时会话目录中的文件,获取所有$
SESSIONID值,使用设置当前会话ID,使用session_id($SESSIONID)开始会话session_start()并通过PHP访问所需的数据,而无需来解析内容文件本身。谁能确认这是否可能?

编辑: 调整后的帖子以匹配Itay的评论。

2020-05-29