在PHP中管理多个会话

时间:2015-10-06 13:02:49

标签: php session session-variables

PHP中是否有办法获取有关我服务器上连接的所有用户会话的信息?

例如:

  • 用户1使用用户信息登录到我的服务器: login =“user1” corpId =“test1”
  • 用户2使用用户信息登录到我的服务器: login =“user 2” corpId =“test2”

每次用户登录时,用户信息都会存储到$ _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)

1 个答案:

答案 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);

?>