リダイレクト先にGETパラメータを付けて、GETパラメータの有無をチェックすれば無限ループしません。
cookie.php
<?php if( !isset($_COOKIE['dmy']) && !isset($_GET['visited']) ){ $_COOKIE['dmy'] = 'クッキーが使えるよ'; header('Location: cookie.php?visited=1'); exit; } ?>
PHPだけを使用して1回のアクセスで
クッキーが使用できるかどうかを知る方法はありません。
質問文のままだと、もちろん無限ループになります。
header('Location: cookie.php');
でリダイレクトしてるので、これが2回目のアクセスになるわけですね。
回答者1の方法が一般的です。
PHP辞典 第2版 (DESKTOP REFERENCE)
西沢 直木
にも同じようなロジックが載っています。
ネットでも、
http://www.phppro.jp/qa/1159
http://blog.olivesystem.com/388.html
ように、似たようなロジックが紹介されています。