2015-10-06 41 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); 

?>