[PHP] クッキーの設定

○クッキー

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”のくだりを、プログラムの最後に持って来た場合。

その場合でも、普通にクッキーが生成されたけど、
「他のあらゆる出力よりも前に~」ってどういう意味?

わからん。

独習PHP 第3版

カテゴリーphp

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です