2016-12-19 7 views
-2

これはおそらくPHPのnoobieの質問です。 最初と2番目のリクエスト中にこのPHPコードの出力はどのようになりますか?

は、一部のサーバーのキャッシュの設定をテストするために、私は私のテストスイートに次のコードを追加しました:

<?php 

if (array_key_exists('visited', $GLOBALS)) 
{ 
    print_r("We have already met"); 
} else { 
    print_r("Hello ShimmerCat"); 
} 

$GLOBALS['visited']=1; 
?> 

は、私が第一及び第二の要求の間に枝の貴様のパスを取るために、このコードを期待していたが、それ常に2番目のメッセージを返しています。私は何をしたいのですか?

+4

期待が間違っています。 '$ GLOBALS'はリクエスト間で維持されません。 – marekful

+0

ありがとう@marekful。要求の間にいくつかの状態を維持する簡単な方法はありますか? – dsign

+1

Apacheモジュールとして実行された場合、PHPのグローバルスコープは要求全体に存在し、他の人とは共有されません。 '$ _SESSION'を使ってセッション内のデータを維持することができます。 – marekful

答えて

4

PHP自体はステートレスです。つまり、ユーザーがPHPページにアクセスするたびに、スクリプト内で各変数が定義された状態で、最初からすべての操作が行われます。

ビュー間にデータを格納する場合、基本的な方法はcookiesです。覚えているものの詳細を安全にしたい場合は、セッションクッキーを使用してください。

+0

ありがとうございます。これは、クライアントがカールしている(クッキーに従わない)テストスイート用で、PHPはHHVMによってホストされています。 $ _SESSIONはここで動作しますか? – dsign

+0

$ _SESSIONは依然としてユーザーのブラウザでCookieを使用します。より安全なのは、ユーザーのブラウザーにIDを保管し、サーバーに保管されているすべての実際のデータを一意のIDでアクセスできるためです。 [CURLでアクセスできないクッキー](https://ec.haxx.se/http-cookies.html)も聞いたことがありません。 –

+0

リンク@Husseinをありがとう、私は間違いなくカールしたクッキーは後で 'Set-Cookie'ヘッダと' -HCookie:... 'オプションを手動で解析する必要がありますが、あなたのリンクは状況を明確にします。 – dsign

関連する問題