2015-10-06 56 views
1

有没有办法在PHP中获取有关我的服务器上连接的所有用户会话的信息?在PHP中管理多个会话

例如:

  • 用户1登录到我的服务器与用户信息:登录名= “用户1”corpId = “测试1”
  • 用户2登录到我的服务器与用户信息:登录名= “用户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) 
+0

您可以使用数据库来管理连接吗? – Martin

+0

数据库是管理会话数据的最佳方式... –

+0

@Martin好的,我将使用数据库管理连接。当然PostGreSql已经部署在我的服务器上。谢谢 – wawanopoulos

回答

2

注意:我认为,正确的做法应该使用一个数据库来管理连接,如在评论中指出@马丁。我回答这个只是为了给出一个不同的方法。

所有正在运行的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); 

?>