2012-03-09 15 views
-3

$ _SESSIONではなく、グローバルスクリプト変数を保持するために$ _ENVを使用する際に危険がありますか?私は2つの超大域の違いを理解していますが、$ _ENVを$ _SESSION以上使用した場合の影響についてはわかりません。 $ _SESSIONはより多くのセキュリティを提供しますか?

+0

誰もセキュリティを提供していない、彼らはただの変数です – zerkms

+0

2つの全く異なる概念...どのようなものが交換可能であることを示していますか? –

+0

@pst - どちらもスーパーグローバルであり、両方ともグローバルデータを格納しています(両方ともグローバルに利用可能です)。アクセス範囲のみが異なります。このドキュメントでは、 "global"を使用する代わりに$ _ENVを使用してグローバルを格納することを提案していますが、$ _ENVは現在のインスタンスでのみ使用可能です。しかし、質問に戻ると、いくつかのアプリでは、$ _ENVにセッションデータを格納してから、後でセッションに書き戻す人がいます。私が理解していないこの特定の理由はありますか?セッション状態を保存するなど、プログラミングが貧弱ですか? – ws8

答えて

2

これは2つの全く異なるものです。

$_SESSION:現在のスクリプトで使用可能なセッション変数を含む連想配列。

$_ENV:環境メソッドを介して現在のスクリプトに渡される変数の連想配列。

2

$ _SESSIONの代わりに$ _ENVを使用することはできません。
それだけです。あなたが設定すること

任意の環境変数は、(第2の割合で死んでしまう)のみ同じPHPインスタンスには、環境変数にアクセスしている何

+0

Trueですが、必要なスコープに応じて両方を使用してグローバルを格納できます。 – ws8

+1

グローバル?範囲?あなたは何について話していますか? –

+0

$ _ENVのphpマニュアルによると、 "これは「スーパーグローバル」または自動グローバル変数です。これは、スクリプト全体を通してすべてのスコープで利用可能であることを意味します。グローバル$変数を実行する必要はありません。それは機能や方法の中で "。したがって、$ _ENVを使用して、現在のインスタンスの外部では不要なアプリケーション・グローバルを格納できます。しかし、これは$ _ENVの許容された使用ですか? – ws8

2

に利用できるようになります。このためには、関数getenv()setenv()を使用する必要があります。

環境変数:

これらの変数は、システムによって設定されているかなどに追加することができます。 Apacheの設定ファイルまたは.htaccess。 例:Apacheで使用可能SetEnv ENV_VARNAME foobar

しかし、セッション(またはCookie)も変数と同じではありません。セッションは複数の要求に対して状態を保持できますが、変数やグローバルでは受け付けません。 sessions

+3

'$ _ENV' *は廃止されていません。 – Josh

+0

ああ、私はこの部分を誤解しています。 [refsect1-reserved.variables.environment-changelog](http://nl.php.net/manual/en/reserved.variables.environment.php#refsect1-reserved.variables.environment-changelog) – stefano

関連する問題