コード例を次に示します。
if (!empty($_GET['supahCookie']))
{
setcookie("myCookie", $_GET['supahCookie'], time()+3600*24*31);
}
$foo = empty($_COOKIE['myCookie'])?'Empty! :(':$_COOKIE['myCookie'];
echo $foo;
出力は次のようになります。
空の!:(
最初は非同期で実行されたように見えsetcookie()
ますが、少し考えてみればsetcookie()
、Cookie ヘッダーを設定するだけではそうではありません。(サーバー<->ブラウザの話はほとんどありません)
問題は、新しく作成された Cookie にすぐにアクセスする必要があることです。どうすればいいですか?
私が思いつく唯一の方法はこれです:
if (!empty($_GET['supahCookie']))
{
setcookie("myCookie", $_GET['supahCookie'], time()+3600*24*31);
unset($_GET['search_type']); // to avoind redirect loop
header('Location: ./?'.http_build_query($_GET));
}
うーん..もう1つ、少し厄介なものがあります。
$foo = empty($_GET['supahCookie'])?(empty($_COOKIE['myCookie'])?'Empty! :(':$_COOKIE['myCookie']):$_GET['supahCookie'];
ここでまた車輪を発明しているのでしょうか?
他のよりエレガントなソリューションはありますか?