概要
- Cookieはサーバー側からクライアントのブラウザーに変数のように情報を記録する仕組み
- クライアントに対するCookieの設定は
setcookie()
関数で行う- Cookieの設定の際は
time()
関数を使って有効期限をセットする
- Cookieの設定の際は
- PHPではスーパーグローバル変数
$_COOKIE
を通して参照する - Cookieの削除は
setcookie()
で過去の時刻を有効期限としてセットする
基本の流れ
Cookieのセット
サーバー側のPHPでsetcookie()でクライアントのCookieをセットする。
setcookie('キー', 値, 有効期限)
有効期限は現時点からの秒数で指定し、通常はtime()+破棄までの秒数
で指定する。
Cookieの参照
クライアントに特定のキーのCookieがセットされているかどうかはisset()でチェック。
isset($_COOKIE['キー']) : true/false
セットされている場合は連想配列としてキーを指定して参照する。
Cookieの削除
Cookieの削除は、setcookie()で有効期限を過去の時刻でセットする。たとえばtime()-ある程度の秒数
、0を指定してもよい。
例
HTMLは以下を処理する。
- もしPHP側で変数が定義されていれば、既に登録された好きな食べ物として表示
- 好きな食べ物を登録する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Cookie確認</title> <style> input { display: block; margin-bottom: 10px; } </style> </head> <body> <?php if (isset($favorite_food)): ?> <p>あなたの好きな食べ物は<?=$favorite_food?>とのことでしたが・・・。</p> <?php endif; ?> <form method="post"> <label for="favorite_food">最近好きな食べ物は?</label> <input type="text" name="favorite_food" value=""> <input type="submit" value="登録する"> </form> </body> </html> |
PHPコードでは以下のような処理をしている。
- Cookieがセットされていればその内容を変数に代入する
- 全てが空白であれば無視する
- 空白でなければその内容をCookieにセットする
header()
関数で改めてこのページを実行しなおす
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if (isset($_COOKIE['favorite_food'])) { $favorite_food = $_COOKIE['favorite_food']; } $input = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $input = preg_replace("/\A[\p{Z}]++|[\p{Z}]++\z/u", '', $_POST['favorite_food']); if ($input !== '') { setcookie('favorite_food', $input, time() + 60 * 10); header("Location: {$_SERVER['REQUEST_URI']}"); exit; } } |