0

我在我的 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 总是引用同一个会话,所以不需要在数组内有一个数组。

提前致谢。

4

1 回答 1

2

_id 包含 MongoId 实例

所以你需要在分配给会话变量之前将其转换为字符串

如下

$_SESSION["gatekeeper"] = (string) $obj["_id"]
于 2012-10-02T08:36:12.047 回答