0

最初に私は私のように持っていsetcookie()ました:

$school = "Some Value";
setcookie("default_school", $school, time()+3600);
var_dump($_COOKIE);

それはうまくいかなかったので、検索を行ったところ、おそらくパスを設定するだけでよいことがわかったので、次のように変更しました。

$school = "Some Value";
setcookie("default_school", $school, time()+3600, "/", ".mydomain.com");
var_dump($_COOKIE);

それでもうまくいかなかったので、さらに調査を行い、問題はCookieの設定が遅すぎたに違いないと判断しました。そこで、コードの特定の部分にヘッダーが設定されているかどうかを確認し始めました。これは、を返す必要がありますbool(false)

var_dump(headers_sent());

最初に私の上部index.php、次に私の上部にありますheader.phpが、それでも同じ結果です。それらは両方ともtrueを返しますか?

これはとても単純なはずだと思います、そして私はどこにも行きません。正しい方向へのプッシュをいただければ幸いです。

ありがとう、アイザック

編集:initフックの前に配置しようとしたところ、falseが返されました。次に、setcookie関数をそこに配置しましたが、それでも運がありません。

編集2:追加することになった:

function set_user_cookie() {
    $school = "Some Value";
    setcookie('default_school', $school, time()+3600);
}

add_action('init', 'set_user_cookie');

そして今、それは完全に機能します。

4

1 に答える 1

0

この種の状況をデバッグするには、適切なエラー レポートを有効にすることから始める必要があります (運用環境では使用しないでください)。

error_reporting(-1);
ini_set('display_errors', 'On');

その後呼び出すsetcookie()と、出力が開始された場所を示す警告が発行されます。

それができない場合はheaders_sent()、この方法で使用して、出力がどこから開始されたかを把握することもできます。

if (headers_sent($file, $line)) {
    echo "Output started in $file on line $line\n";
}
于 2012-10-04T06:32:47.427 に答える