0

PHP Webサイトで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 に答える