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值,使用session_id($SESSIONID)
设置当前会话ID,使用session_start()
启动会话,并通过PHP访问所需的数据,而无需分析文件本身的内容。有人可以确认这是否可能吗?
编辑:根据Itay的评论进行了调整。