ゼロから始めるPHP講座 Vol.46 Cookieの使用例


ゼロから始めるPHP講座 Vol.46 Cookieの使用例
目次
  1. ゼロから始めるPHP講座Cookieの使用例
  2. Cookie使用例

ゼロから始めるPHP講座Cookieの使用例

Cookie使用例

よく使われている例として、ログインページで過去入力したユーザ名の自動入力があります。

ファイル: /htdocs/cookie_sample_top.php, /include/view/cookie_sample_top.php, /htdocs/cookie_sample_login.php

/htdocs/cookie_sample_top.php

<?php
// Cookieの仕組み理解を優先しているため、Modelへ処理を分離していません
//require_once '../include/conf/const.php';
//require_once '../include/model/function.php';

if (isset($_COOKIE['cookie_check']) === TRUE) {
    $cookie_check = 'checked';
} else {
    $cookie_check = '';
}

if (isset($_COOKIE['user_name']) === TRUE) {
    $user_name = $_COOKIE['user_name'];
} else {
    $user_name = '';
}

$cookie_check = htmlspecialchars($cookie_check, ENT_QUOTES, 'UTF-8');
$user_name    = htmlspecialchars($user_name  , ENT_QUOTES, 'UTF-8');

include_once '../include/view/cookie_sample_top.php';

/include/view/cookie_sample_top.php

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ユーザ名自動入力</title>
    <style>
        .block {
            display: block;
            margin-bottom: 10px;
        }

        .small {
            font-size: 0.8em;
        }
    </style>
</head>
<body>
    <form action="cookie_sample_login.php" method="post">
        <label for="user_name">ユーザ名</label>
        <input type="text" class="block" id="user_name" name="user_name" value="<?php print $user_name; ?>">
        <label for="passwd">パスワード</label>
        <input type="password" class="block" id="passwd" name="passwd" value="">
        <span class="block small"><input type="checkbox" name="cookie_check" value="checked" <?php print $cookie_check;?>>次回からユーザ名の入力を省略</span>
        <input type="submit" value="ログイン">
    </form>
</body>
</html>

/htdocs/cookie_sample_login.php

<?php

// Cookieの仕組み理解を優先しているため、Modelへ処理を分離していません
//require_once '../include/conf/const.php';
//require_once '../include/model/function.php';

$now = time();

if (isset($_POST['cookie_check']) === TRUE) {
    $cookie_check = $_POST['cookie_check'];
} else {
    $cookie_check = '';
}

if (isset($_POST['user_name']) === TRUE) {
    $cookie_value = $_POST['user_name'];
} else {
    $cookie_value = '';
}

// Cookieを利用するか確認
if ($cookie_check === 'checked') {
    // Cookieへ保存
    setcookie('cookie_check', $cookie_check, $now + 60 * 60 * 24 * 365);
    setcookie('user_name'   , $cookie_value, $now + 60 * 60 * 24 * 365);
} else {
    // Cookieを削除
    setcookie('cookie_check', '', $now - 3600);
    setcookie('user_name'   , '', $now - 3600);
}

print 'ようこそ';

動作サンプル:cookie_sample_top.php

php-cookies-sample1-639

/htdocs/cookie_sample_login.php

// Cookieへ保存
setcookie('cookie_check', $cookie_check, $now + 60 * 60 * 24 * 365);
setcookie('user_name'   , $cookie_value, $now + 60 * 60 * 24 * 365);

/htdocs/cookie_sample_top.php

if (isset($_COOKIE['cookie_check']) === TRUE) {
    $cookie_check = 'checked';
} else {
    $cookie_check = '';
}

if (isset($_COOKIE['user_name']) === TRUE) {
    $user_name = $_COOKIE['user_name'];
} else {
    $user_name = '';
}

cookie_sample_login.phpにてPOSTで送信されたユーザ名を受け取りCookieへ保存していますが、実際にCookieの値を利用しているのはcookie_sample_top.phpです。

このようにCookieへの保存と取り出しは別なファイルから行うことが可能です。

以前URLの仕組みに関して、「http://の後、最初の/(スラッシュ)が出てくるまでがインターネット上の住所」と説明しました。

php-cookies-sample2-639

このインターネット住所のことをドメインと呼びます。

Cookieには有効範囲があり、デフォルトでは「ドメインが同じ」かつ「Cookieを保存したファイルの保存場所と同じディレクトリ(フォルダ)以下」となります。

実はsetcookie関数はCookieの有効範囲を引数で指定することが可能です。初期値として設定されているのが上記となります。

細かな仕様については理解が難しいかもしれませんので、ひとまず「Cookieには有効範囲がある」ということを覚えておきましょう。

/htdocs/cookie_sample_login.php

<pre>// Cookieを利用するか確認
if ($cookie_check === 'checked') {
    // Cookieへ保存
    setcookie('cookie_check', $cookie_check, $now + 60 * 60 * 24 * 365);
    setcookie('user_name'   , $cookie_value, $now + 60 * 60 * 24 * 365);
} else {
    // Cookieを削除
    setcookie('cookie_check', '', $now - 3600);
    setcookie('user_name'   , '', $now - 3600);
}

Cookieの値を空文字、Cookieの有効期限を過去の時間に指定することで、Cookieの削除ができます。

サンプルではCookieを利用するかどうかユーザにチェックボックスで選択させており、チェックがなかった場合はCookieを削除しています。

最後にCookieへ保存する情報ですが、パスワードもCookieへ保存することは可能です。

しかしパスワードのような重要な情報は、セキュリティ関係上Cookieに保存してはなりません。

NEXTLESSONセッションとは

PREVLESSONCookieとは


CodeCampus編集部
この記事を書いた人
CodeCampus編集部
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp