Cookie(クッキー)とは、ウェブブラウザーにデータを保存できる機能のことで、ウェブ上の各種プログラミング言語で扱うことができます。PHPでも、次の setcookieファンクションを利用すれば保存できます。
まずは、次のフォームを作成してみましょう。
<form action="" method="post">
<label for="account">アカウント名:</label>
<input type="text" name="account" id="account" value="">
<button type="submit">ログイン</button>
</form>
ログインボタンをクリックしたときに、アカウント名を Cookieに保存するには次のようなプログラムを作成します。
Cookieに値を保存する
先のフォームのファイルの先頭に、次のように追加します。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$account = filter_input(INPUT_POST, 'account');
setcookie('account', $account, time() + 3600);
}
?>
まずは、フォームが送信されてきていることを確認するため REQUEST_METHODが POSTであるかを確認しましょう。送信されてきていたら、filter_inputを利用して値を受信します。そして、これを Cookieに保存します。
setcookie('account', $account, time() + 3600);
パラメーターは次の通りです。
キー
まずはキーを指定します。このキーで値が保存されるため、他の値を保存する時には同じキーを使わないようにしましょう。
値
保存するデータを指定します。ここでは、先ほど受信したデータを指定します。
有効期限
この Cookieの有効期限を設定します。UNIXタイムスタンプで指定します。ここでは、timeファンクションを使って現在の時刻を取得した後、そこに 60秒×60分 = 3600秒で 1時間後を指定しています。これにより、1時間は保存されます。
省略した場合は、ブラウザーを終了したときに消えるようになります。
Cookieを利用する
Cookieを利用する場合は、$_COOKIEというグローバル変数を使って、保存したときに使ったキーを指定します。
$account = $_COOKIE['account'];
ただしこの場合は、Cookieに値がない場合にエラーが発生してしまうため、filter_inputを利用すると良いでしょう。テキストフィールドの value属性などに利用できるようになります。
$account = filter_input(INPUT_COOKIE, 'account');
<input type="text" name="account" id="account" value="<?php echo htmlspecialchars($_COOKIE['account'], ENT_QUOTES | ENT_HTML5); ?>">
Cookieを削除する
Cookieを削除する場合は、同じく setcookieを利用して空の値で上書きします。同時に、過去の日付を指定するとキーごと削除できます。
setcookie('account', '', time() - 1);