「setcookieでクッキーを設定しても$_COOKIE変数に設定されない」
setcookie("a", time()+3600, "/");
echo $_COOKIE["a"];
を実行すると
Notice: Undefined index: a in a.php on line 2
エラーが表示され、
setcookieでクッキーを設定しても$_COOKIE変数に設定されていない。
回答
1つのリクエストで、setcookieでクッキーを設定しても$_COOKIE変数に即時に値は設定されていません。
ただし1つ目のリクエストでsetcookieでクッキーを設定すると、次のリクエスト時には$_COOKIE変数に値が設定されています。
これはPHPの仕様です。
ソース
test.php
------------------------------------------------------------
<?php
if(isset($_COOKIE["a"])){
$a=$_COOKIE["a"]+1;
}else{
$a=1;
}
//ここでクッキーに$iの値を設定している
setcookie("a", $a, time()+3600, "/");
//$aとクッキーは同じ値になるはずだが実際は違う値になる。
echo "\$a=".$a." : \$_COOKIE[\"a\"]=".$_COOKIE["a"];
?>
------------------------------------------------------------
上記test.phpをブラウザで実行してF5キーを何度か押すと、$aと$_COOKIE["a"]は1ずれて表示されます。
$a=1 , $_COOKIE["a"]=
$a=2 , $_COOKIE["a"]=1
$a=3 , $_COOKIE["a"]=2
・・・
1つのリクエストでsetcookieでクッキーが更新されるが、$_COOKIEは更新されない。
同一リクエストで変更されたクッキーの値を使用する場合は
setcookieでクッキーを設定したら$_COOKIE変数にも同じ値を設定する必要があります。
--------------------------------------------------------
$a=1;
setcookie("a", $a, time()+3600, "/");
$_COOKIE["a"]=$a;
echo "\$a=".$a." , \$_COOKIE[\"a\"]=".$_COOKIE["a"];
--------------------------------------------------------
上記を実行すると
$i=1 , $_COOKIE["a"]=1
となります。