PHPで Cookieを扱う – setcookie

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);