- 締切済み
クッキー送信
以下のコードでクッキーが送信できると思ったのですができません。 どこがいけないでしょうか? <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>cookie</title> <script language="javascript"><!-- --></script> </head> <body onLoad="setfocus()"> <?PHP if(!isset($_COOKIE['visited']))// { //はじめての訪問 $count=1; echo"<p></p>"; } else { echo"cookie up<br />"; $count = $_COOKIE['visited']; $count++; } setcookie('visited',$count);// echo "Hello!!<br />"; echo "your ${count} visited!<br />"; echo '<a href="cookie.php">cookie</a>' ?> </body> </html>
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
あ、ついでにもう一つ UTF8で保存しているのであればBOMが悪さすることもあるので BOMなしで保存してください
- yambejp
- ベストアンサー率51% (3827/7415)
>教えていただいたソースを丸ごと写した え~と、うまく伝わらなかったかなぁ・・・ すべての出力の前にクッキーをセットするという意味だったんですが <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; setcookie('visited',$visited); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio … <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>cookie</title> <script language="javascript"><!-- --></script> </head> <body onLoad="setfocus()"> visit:<?PHP print $visited; ?> </body> </html> みたいな感じ javascriptの部分が中途半端にしかかいてないので そこは自己解決してください
- yambejp
- ベストアンサー率51% (3827/7415)
クッキーのやり取りについて理解が必要 (1)ブラウザからサーバーにクッキーをおくる (2)サーバーからブラウザにクッキーをおくる (3)サーバーからブラウザにhtmlの本文をおくる の流れです。 なので(2)の前に(3)が発生した場合、サーバーからブラウザにクッキーは送られません。 サーバーがhtml本文を送る場合、ある程度バッファリングをするので さほど問題はないのですが、例示のとおりだとsetcookieを実行する前に html文が書かれているので、不安定な状態です。 例) <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; setcookie('visited',$visited); print $visited; ?> なら、setcookieの前に出力がないので確実にクッキーはセットされますが <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; print "test"; setcookie('visited',$visited); print $visited; ?> だと、setcookieの前の出力がバッファされるかどうかわからないので不安定 <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; print "test"; ob_flush(); setcookie('visited',$visited); print $visited; ?> すると、setcookieの前に確実に出力がされるのでクッキーがセットできない
補足
素早い返信ありがとうございます。 教えていただいたソースを丸ごと写したのですがうまくいきません。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>cookie</title> <script language="javascript"><!-- --></script> </head> <body onLoad="setfocus()"> <?PHP $visited=isset($_COOKIE['visited'])?$_COOKIE['visited']:0; $visited++; setcookie('visited',$visited); print $visited; ?> </body> </html> サーバーにアップロードしたのですが、何が邪魔しているのでしょうか? クロームのクッキーを調べるプラグインで確認したところ、setcookieがうまくいっていないようです。 クッキーがブラウザに登録されません。 http://goo.gl/hlNKKQ