- 更新日: 2017年03月23日
- 公開日: 2015年12月08日
ゼロから始めるPHP講座 Vol.46 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
/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://の後、最初の/(スラッシュ)が出てくるまでがインターネット上の住所」と説明しました。
このインターネット住所のことをドメインと呼びます。
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編集部