PHP中是否有办法获取有关我服务器上连接的所有用户会话的信息?
例如:
每次用户登录时,用户信息都会存储到$ _SESSION。
要解决的问题:
当用户调用登录API时,我希望能够检查用户是否与同一个corpId连接的会话是否存在。
测试示例:
User 3 (corpId="test3") calls login API. Result = SUCCESS
User 4 (corpId="test2") calls login API. Result = FAILED
(cause="ALREADY_EXISTING_SESSION)
答案 0 :(得分:2)
注意: 我认为正确的方法应该是使用数据库来管理连接,正如@Martin在评论中指出的那样。我回答这个问题只是为了给出一个不同的方法。
所有正在运行的PHP会话都保存在a folder的文件中,直到它们被销毁(在this question处取消)。您可以读取该文件夹中的所有会话文件,解码它们并检查是否已存在corpId
的会话文件。以下是在CentOS中使用默认save_path
的示例。
<?php
session_start();
$session_files = glob("/tmp/sess_*");
$corpIds = array();
foreach($session_files as $session_file) {
$session_data = @file_get_contents("$session_file");
if($session_data === false)
continue;
session_decode($session_data);
if(!in_array($_SESSION["corpId"], $corpIds))
$corpIds[] = $_SESSION["corpId"];
}
print_r($corpIds);
?>