スーパーグローバル$ _SESSIONを上書きしても安全ですか?
-
27-10-2019 - |
質問
スーパーグローバル$_SESSION
を特殊なセッションオブジェクトで上書きしても安全ですか?
ジェネラコディセタグプレ
解決
これはうまくいくかもしれませんが、私はそれが賢明な行動だとは思いません。私の意見では、驚き最小の原則は、ユーザーインターフェイスの設計だけでなくプログラミングにも当てはまります。スクリプト内の$_SESSION
のデフォルトの動作を上書きすると、コードを処理しなければならない将来のプログラマーの混乱を招くことになります。
このように$_SESSION
の超グローバルな性質を悪用することは、ハックであり、不快なことだと思います。
私の意見では、データを取得および設定するための静的メソッドを使用してクラスを作成することをお勧めします。 ジェネラコディセタグプレ
その後、Session::get('someKey')
またはSession::get('someKey', 'default')
とSession::set('someKey', 'someValue')
を使用してこれにアクセスできます。
クラスは本質的にグローバルであるため、コード内のどこからでもこれにアクセスできます。それほど驚くことではなく、将来の混乱も少なくなります。
設計上の理由でオブジェクトメソッドを使用したい場合は、シングルトンパターンを実装するのが最適な場合があります。
他のヒント
私には少し危険なようです。 session_set_save_handler メソッドを確認しましたか?$ _SESSIONを上書きする代わりに、使用する独自のハンドラーを指定できます。
セッションの処理とストレージを自分で処理する場合は、好きなことを行うことができます。$ _SESSIONスーパーグローバルは、その点で他の変数と同じように使用できます。
それを特別に扱うのはPHPのデフォルトのセッションハンドラーだけです。そこには通常の配列が必要です(数値でインデックスを付けてはいけません)。これを再度使用する場合は、シャットダウン呼び出しで派手なArrayObjectラッピングを元に戻す必要があります。 ジェネラコディセタグプレ