在PHP中是否有办法获取服务器上所有会话(以及每个会话中的变量)的列表?
基本上,我们有一个维护功能,需要知道哪些用户当前登录到站点.我们已经将每个用户的数据存储在会话变量中,但我希望我可以遍历每个会话并获取我需要的数据.
我的PHP是非常有限的(我是一个.Net开发人员),但如果有人知道这是否可能(以及如何做)我将非常感激.我用谷歌搜索了这个,我发现的结果倾向于暗示这是不可能的,但我发现这很难接受.
尽管如此,如果你不能,你可以,但我认为我在StackOverflow上的好友可以给我一个明确的答案!
PHP将每个用户的会话数据存储在服务器上的临时文件夹中.此文件夹在变量session.save_path下的php.ini配置文件中定义.从php.ini文件中找到此值,或者创建一个php文件:
作为它的内容,并在您的浏览器中打开该文件.
找到会话数据的保存路径后,打开该文件夹,您会发现一个相当简单的结构.所有会话都以以下格式存储:sess_ $ SESSIONID.
会话数据在存储到磁盘之前被序列化.因此,存储在会话文件中的对象在被使用之前必须被反序列化.但是,如果您使用按原样存储的纯文本来存储会话数据(例如$_SESSION['userid'] = 1234
)以存储有关用户的信息,则应该很容易从内部解析您要查找的数据文件.
还有一件事......我没有看过它,但看起来好像文件名中出现的会话ID直接对应于存储在用户计算机上的PHPSESSID cookie的名称.因此,考虑到这一点,可以循环访问临时会话目录中的文件,获取所有$ SESSIONID值,使用设置当前会话ID session_id($SESSIONID)
,启动会话session_start()
并通过PHP访问所需的数据,而无需解析内容文件本身.任何人都可以确认这是否可行?
编辑:调整后的帖子以匹配Itay的评论.
这是通过存储文件获取会话列表的更简洁方法:
这将为您获取所有会话的数据,这些数据存储在数组中并按会话ID索引: