2012-10-02 68 views
0

我在我的PHP網站上使用MongoDB來保持我的註冊用戶和他們的登錄。到現在爲止還挺好。MongoDB在PHP中登錄系統和會話

當我登錄,我用下面(簡化):

$login = $collection->findOne(array("mail" => $mailIn, "pass" => $passIn)); 
if($login) { 
    $_SESSION["gatekeeper"] = $login['_id']; 
} 

,當我註冊,以下內容:

$collection->insert($obj); 
mkdir("$appDirectory/users/" . $obj["_id"]); 
$_SESSION["gatekeeper"] = $obj["_id"]; 

整個系統工作良好,但有東西讓我煩惱:看看會話管理器中的JSON:

"{\"gatekeeper\":{\"$id\":\"505f1cd25c73959504000000\"}}" (redis) 
array(1) { ["$id"]=> string(24) "505f1cd25c73959504000000" } (php var dump - gatekeeper) 

,就像你看到的那樣,它將它存儲爲一個關聯數組$ id-> id。

當然,簡單的gatekeepeer-> id會好得多。

我該如何輕鬆改變這種情況?老實說,由於這個「$ id」令我的PHP感到困惑,所以我感到困惑,同時也讓我感到困惑。


基本上煩惱是,當我需要檢索看門人:

$gatekeeper = $_SESSION["gatekeeper"]; 

$userID = $gatekeeper['$id']; //WILL work 
$userID = $gatekeeper; //WON'T WORK 

它就會簡單得多(更好),只是有:

$userID = $_SESSION["gateID"]; 
$userName = $_SESSION["gateName"]; 
.... 

代替:

$gatekeeper = $_SESSION["gatekeeper"]; 

$userID = $gatekeeper['$id']; 
$userName = $gatekeeper['name']; 

自$ _SE SSION始終引用相同的會話,因此不需要在數組內部有數組。

在此先感謝。

回答

2

_id包含MongoId例如

,所以你需要把它轉換成字符串之前分配到會話變量

如下

$_SESSION["gatekeeper"] = (string) $obj["_id"] 
+0

太棒了!我知道這將是一件非常簡單的事情,只是無法弄清楚。 –