○クッキー
HTTPをステートフルな通信にするための仕組み。
保持したいデータをクライアント(ブラウザ)に保存し、
データをHTTPヘッダに含んで受け渡しする。
・クッキーの生成
setcookie([クッキー名], [値], [有効期限], ...); ※スクリプトによる他のあらゆる出力よりも前に 送信される必要がある。
・クッキー情報の受け取り
($value = ) $_COOKIE['[クッキー名]']
・クッキーの破棄
setcookie([クッキー名], , time() - 3600); (有効期限を過去の時刻に設定する)
詳細は↓
http://php.net/manual/ja/function.setcookie.php
●テストプログラム
フォームに入力した値をクッキーに保存し、
次回フォームを開いた時にテキストボックスに元々入ってるようにする。
・form.php : フォームのページ --------------------------------------------------------------- <!DOCTYPE html> <html><body> <form method="POST" action="cookie.php"> 名 前:<input type="text" name="name" value="<?=$_COOKIE['name'] ?? '' ?>" /><br /> メアド:<input type="text" name="mail" value="<?=$_COOKIE['mail'] ?? '' ?>" /><br /> <input type="submit" value="登録" /> </form> </body></html> ---------------------------------------------------------------
条件演算子は入れた方がいい。
無いと、クッキーが設定されていない時、
エラーメッセージがテキストボックスに表示される。
・cookie.php : POSTデータを元にクッキーを作成する --------------------------------------------------------------- <?php setcookie('name', $_POST['name'], time() + 60); setcookie('mail', $_POST['mail'], time() + 60); ?> <!DOCTYPE html> <html><body> クッキーを保存しました。<br /> 名 前:<?=$_POST['name'] ?><br /> メアド:<?=$_POST['mail'] ?><br /> <!-- 名 前:<?=$_COOKIE['name'] ?><br /> メアド:<?=$_COOKIE['mail'] ?><br /> --> <input type="button" onclick="location.href='form.php'" value="戻る"> </body></html> ---------------------------------------------------------------
テスト用なので保存期間は60秒。
コメント部分はイタズラ用。
●実験
フォーム画面で、
名前とメアドを入力して「登録」を押すと、
クッキーが保存される。
この時、レスポンスヘッダにて、
ヘッダ情報”Set-Cookie”が渡される。
(デベロッパーツールにて確認。
Google Chromeの場合は、F12で開く。)
結果画面から「戻る」を押すとフォーム画面に戻り、
はじめからテキストボックスに、
先ほどの入力値が入っている。
その時のリクエストのヘッダに、
Cookieの値が入っていることがわかる。
ちょっとイタズラ。
“cookie.php”(↑↑)の出力に、
コメント部分を使用。
結果、
エラーが出ましたw
$_Cookie[‘name’]は、
クライアントから送られてきたクッキー情報にだけ有効。
作成したプログラム内では使用できないことがわかった。
もういっちょイタズラ。
“set_cookie”のくだりを、プログラムの最後に持って来た場合。
その場合でも、普通にクッキーが生成されたけど、
「他のあらゆる出力よりも前に~」ってどういう意味?
わからん。