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は常に同じセッションを参照するため、配列内に配列を含める必要はありません。
前もって感謝します。