我在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总是引用同一个会话,所以不需要在数组中有一个数组。
提前致谢。
答案 0 :(得分:2)
_id包含MongoId实例
因此您需要在分配到会话变量
之前将其转换为字符串如下所示
$_SESSION["gatekeeper"] = (string) $obj["_id"]