4

次の構文で localhost に Cookie を設定しています

setcookie("testCookie ", "hello cookie", false, "/", false);

問題は、Cookie が作成され、firebug が表示されるページに初めてアクセスしたときです。

Cookie testCookie added.  hello cookie

しかし、それは値を読み取りません。ページを更新すると、値が読み取られ、バグが表示されます

Cookie testCookie changed.  hello cookie

ページが最初にロードされたときに Cookie の値を読み取るにはどうすればよいですか?

4

2 に答える 2

10

私がコメントしたように、あなたの説明から(かなり曖昧であまり理解できませんが)、サーバーに送信される前にCookieを読み取ろうとしていることが問題である可能性があります。

クッキーの仕組みは次のとおりです。

  1. あなたはリクエストをします
  2. サーバーはCookieヘッダーをクライアントに送り返します
  3. ページの読み込み-このページの読み込み時にCookieはPHPに表示されません
  4. 更新
  5. クライアントはCookieヘッダーをサーバーに送信します
  6. サーバーはCookieヘッダーを受信するため、PHPはそれを読み取ることができます
  7. ページの読み込み-Cookieはここに表示されます。

まだ試していない場合は、もう一度更新してください。

設定と同時に読みたいので、設定した値を保存して使ってください。または(これはテストされていませんが)、$_COOKIEアレイに手動で設定することもできます。

だからこのようなもの:

setcookie("helloworld", .. );
$_COOKIE['helloworld'] = $value;

その後、あなたはそれを普通に読むことができます。自動スーパーグローバルの値をオーバーライドすることはお勧めしません(、、、$_REQUESTなども同様です)。代わりに$_POST$_GET設定している値を保存して使用することをお勧めします。


もう1つのアプローチは、「ゲートウェイ」の形式を使用することです。つまり、ゲートウェイページにCookieを設定すると、次のページにリダイレクトされ続けます。

たとえば、フローが次のようになっているとします。- login.php> account.php。ログインフォームを直接POSTするのではなく、account.php2つのオプションがあります。

オプション1:postをlogin.phpに戻し、Cookieを設定してから、にリダイレクトしaccount.phpます。オプション2:、POSTスルーなどのゲートウェイを用意しlogincheck.php、Cookieを設定してから、にリダイレクトしaccount.phpます。

このように、account.php常にあなたのクッキーを見ることができます。

于 2011-05-09T11:18:22.733 に答える
3

関連する場合もしない場合もありますが、整数または文字列を期待するパラメータにブール値を割り当てています。PHPを初めて使用する場合は、マニュアルを注意深く読み、関数のシグネチャを理解することが非常に重要です。この場合、これを読むことができるhttp://php.net/setcookieをチェックする必要があります。

bool setcookie(string $ name [、string $ value [、int $ Expire = 0 [、string $ path [、string $ domain [、bool $ secure = false [、bool $ httponly = false]]]]]])

また、コードを実行すると警告が表示されます。

Warning: Cookie names cannot contain any of the following '=,; \t\r\n\013\014'
于 2011-05-09T11:15:05.090 に答える