2

重複の可能性:
Cookie は更新時にのみ表示されますか?

どのカラーテーマを使用するかを記憶する基本的な PHP Cookie を設定しようとしています。ただし、テストすると、カラーテーマの設定と表示の間に 1 回の更新ラグがあります。

明確にするために:ユーザーが色を選択できるようにする選択フォームがあります。次に、適用ボタンがあります。その適用ボタンが選択されると、ページは自動的に Cookie を設定し、色を表示する必要があります。ただし、適用ボタンを押すと、Cookie のみが設定され、ユーザーが更新ボタンを押すまでテーマは表示されません。これを解決する方法についてのアイデアはありますか?

$help = $_POST["theme"];
    $color = "#" . $help;
    setcookie("TestCookie", $color, time()+60*60*24);
    $recolor = $_COOKIE["TestCookie"];
    echo '<style type="text/css"> body { background: '.$recolor.' } </style>';

$_POST["theme"] は選択フォームの名前です。どうもありがとう!this: Cookie は更新時にのみ表示されますか? 私が話していることですが、C#ではなくPHPで

編集:すべての返信をありがとう!クッキーの設定と同時に背景色をユーザーが選択したものに設定することで、これを回避することができました。したがって、ユーザーが最初に色を選択するとき、それは背景を設定する Cookie ではありません。別の機能です。ちょっと安っぽい感じですが、効きます!

4

5 に答える 5

5

$_COOKIE スーパーグローバルには、そのページをリクエストした時点で利用可能な Cookie があります。そのため、保存したばかりの値は表示されません。

ここのマニュアルページでhttp://php.net/set_cookieを見ることができます:

Cookie が設定されると、次のページ読み込み時に $_COOKIE または $HTTP_COOKIE_VARS 配列を使用してアクセスできます。

于 2012-07-13T13:44:33.630 に答える
3

これは、setcookie が $_COOKIE 変数を変更していないためです。$_COOKIE で関連する値を使用setcookieし、同時に設定する必要があります

于 2012-07-13T13:45:02.780 に答える
2

Cookie を設定し、次のコード行で値を確認しているためだと思います。その時点で、クライアントはページのリクエストを送信しているため、まだ表示できません。 、まだ Cookie は含まれません。

$_SESSION代わりにa を使用してみてください。参照$_COOKIEを $_SESSION 全体で交換するだけです。

それができない場合は、フォームが送信されたかどうかを明示的に確認し、送信したばかりの値に基づいてスタイルを設定してみてください。

于 2012-07-13T13:45:06.267 に答える
2

ShogunArts.deの sulotion に追加するとsetcookie()、この「コマンド」は、最初に HTTP ヘッダーを介してブラウザに送信する必要があります。スーパーグローバルにアクセスしようとすると$_COOKIE、ブラウザから HTTP ヘッダー経由で返されない限り、Cookie の値は含まれません。

何が起こるかは次のとおりです。

  1. リクエストされたページ (ブラウザにはまだ Cookie がありません)
  2. setcookie()呼ばれた。
  3. スクリプトの実行が終了し、ブラウザに応答して、Cookie を設定するように指示されます。
  4. ブラウザが Cookie を持っているため、ページに再度アクセスすると、リクエストとともに送信されます。
  5. PHP が Cookie を含むリクエストを受信したので、$_COOKIEスーパー グローバルを設定し、スクリプトでアクセスできるようになりました。
于 2012-07-13T13:49:49.127 に答える
1

Cookie が設定されているかどうかを確認します。

if(isset($_COOKIE["TestCookie"])) $recolor = $_COOKIE["TestCookie"]; 
else $recolor = $color;
于 2012-07-13T13:47:56.147 に答える