MongoDB登录系统& PHP中的会话

时间:2012-10-02 08:20:26

标签: php session mongodb

我在PHP网站上使用MongoDB来保留我的注册用户和他们的登录信息。到目前为止,非常好。

当我登录时,我使用以下(简化):

$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'];

因为$ _SESSION总是引用同一个会话,所以不需要在数组中有一个数组。

提前致谢。

1 个答案:

答案 0 :(得分:2)

  

_id包含MongoId实例

因此您需要在分配到会话变量

之前将其转换为字符串

如下所示

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