PHPセッション変数のショートカット?
-
06-07-2019 - |
質問
だから、 $ _ SESSION
変数を使用しているPHPサイトでメンテナンスを行っています。私はいくつかの非常に奇妙な動作を見始めましたが、数時間のデバッグの後、私はこれを理解しました。例として、次のようなセッション変数のセットアップがあるとします:
だから、 $ _ SESSION
変数を使用しているPHPサイトでメンテナンスを行っています。私はいくつかの非常に奇妙な動作を見始めましたが、数時間のデバッグの後、私はこれを理解しました。例として、次のようなセッション変数のセットアップがあるとします:
$sql = "SELECT whatever FROM table";
$user = $db->fetchRow($sql);
スクリプトのある時点で、いくつかのZendクラスを使用してMySQLテーブルの呼び出しが行われます。
<*>
今、奇妙さはここから始まります...このデータベース呼び出しが行われた後、私の $ _ SESSION ['user']
配列値はすべて、突然取得されたオブジェクトに変更されますデータベース呼び出しから...
基本的に: $ _ SESSION ['user']
は、変数 $ user に格納されるはずのfetchRow DBメソッドを使用して取得されたオブジェクトと同じです。コード>。これを見たことがありません。
私が理解できる唯一のことは、変数名 $ user
が $ _ SESSION ['user']
配列キー名と同じであるためです。ショートカットか何かのように。
これは今まで聞いたことのない奇妙なPHPセッションショートカットのようなものですか?
補足として、 $ _ SESSION
変数に直接アクセスすることはベストプラクティスではないことを知っています。このウェブサイトは作成しませんでした。私の仕事は、いくつかの問題を修正して機能を追加することです。
更新:案の定、register_globalsはオンです。クイックヘルプのおかげで。私がそのような奇妙な振る舞いを見たのも不思議ではありません。
SESSION['user']['id'] = 123;
だから、 $ _ SESSION
変数を使用しているPHPサイトでメンテナンスを行っています。私はいくつかの非常に奇妙な動作を見始めましたが、数時間のデバッグの後、私はこれを理解しました。例として、次のようなセッション変数のセットアップがあるとします:
<*>
スクリプトのある時点で、いくつかのZendクラスを使用してMySQLテーブルの呼び出しが行われます。
<*>
今、奇妙さはここから始まります...このデータベース呼び出しが行われた後、私の $ _ SESSION ['user']
配列値はすべて、突然取得されたオブジェクトに変更されますデータベース呼び出しから...
基本的に: $ _ SESSION ['user']
は、変数 $ user に格納されるはずのfetchRow DBメソッドを使用して取得されたオブジェクトと同じです。コード>。これを見たことがありません。
私が理解できる唯一のことは、変数名 $ user
が $ _ SESSION ['user']
配列キー名と同じであるためです。ショートカットか何かのように。
これは今まで聞いたことのない奇妙なPHPセッションショートカットのようなものですか?
補足として、 $ _ SESSION
変数に直接アクセスすることはベストプラクティスではないことを知っています。このウェブサイトは作成しませんでした。私の仕事は、いくつかの問題を修正して機能を追加することです。
更新:案の定、register_globalsはオンです。クイックヘルプのおかげで。私がそのような奇妙な振る舞いを見たのも不思議ではありません。
SESSION['user']['firstname'] = 'John';
だから、 $ _ SESSION
変数を使用しているPHPサイトでメンテナンスを行っています。私はいくつかの非常に奇妙な動作を見始めましたが、数時間のデバッグの後、私はこれを理解しました。例として、次のようなセッション変数のセットアップがあるとします:
<*>
スクリプトのある時点で、いくつかのZendクラスを使用してMySQLテーブルの呼び出しが行われます。
<*>
今、奇妙さはここから始まります...このデータベース呼び出しが行われた後、私の $ _ SESSION ['user']
配列値はすべて、突然取得されたオブジェクトに変更されますデータベース呼び出しから...
基本的に: $ _ SESSION ['user']
は、変数 $ user に格納されるはずのfetchRow DBメソッドを使用して取得されたオブジェクトと同じです。コード>。これを見たことがありません。
私が理解できる唯一のことは、変数名 $ user
が $ _ SESSION ['user']
配列キー名と同じであるためです。ショートカットか何かのように。
これは今まで聞いたことのない奇妙なPHPセッションショートカットのようなものですか?
補足として、 $ _ SESSION
変数に直接アクセスすることはベストプラクティスではないことを知っています。このウェブサイトは作成しませんでした。私の仕事は、いくつかの問題を修正して機能を追加することです。
更新:案の定、register_globalsはオンです。クイックヘルプのおかげで。私がそのような奇妙な振る舞いを見たのも不思議ではありません。
SESSION['user']['lastname'] = 'Doe';
スクリプトのある時点で、いくつかのZendクラスを使用してMySQLテーブルの呼び出しが行われます。
<*>今、奇妙さはここから始まります...このデータベース呼び出しが行われた後、私の $ _ SESSION ['user']
配列値はすべて、突然取得されたオブジェクトに変更されますデータベース呼び出しから...
基本的に: $ _ SESSION ['user']
は、変数 $ user に格納されるはずのfetchRow DBメソッドを使用して取得されたオブジェクトと同じです。コード>。これを見たことがありません。
私が理解できる唯一のことは、変数名 $ user
が $ _ SESSION ['user']
配列キー名と同じであるためです。ショートカットか何かのように。
これは今まで聞いたことのない奇妙なPHPセッションショートカットのようなものですか?
補足として、 $ _ SESSION
変数に直接アクセスすることはベストプラクティスではないことを知っています。このウェブサイトは作成しませんでした。私の仕事は、いくつかの問題を修正して機能を追加することです。
更新:案の定、register_globalsはオンです。クイックヘルプのおかげで。私がそのような奇妙な振る舞いを見たのも不思議ではありません。
解決
PHP.iniで register_globals がオンに設定されているように聞こえます。これをオフにすると修正されます。
PHP.iniを変更するアクセス権がない場合は、代替ソリューションこちら
他のヒント
グローバルの登録がオンになっているかどうかを確認します。セッションデータに安全にアクセスする唯一の方法は、 $ _SESSION へのアクセスのみです。
グローバルの登録は、グローバル変数をローカル変数に変換する古い機能です。問題は、データの送信元を安全に知ることができなかったことです。セッションから期待するものは、get、post、またはcookie変数で設定できます。そのため、セキュリティをバイパスすることは非常に簡単でした。