クッキーとは、サーバー上のデータをブラウザに保存することで、同じ情報を再利用することです。WEBページを開くと、すでにメールアドレスが入力された状態のときがあるかと思います。その機能がクッキーを利用しています。
以前に作成した「掲示板」では最初にコメントを書き込んだ時に名前をPOSTメソッドで送信しています。サーバーは受け取った名前データを書き込んだクッキーをブラウザに送信します。
これにより、サーバーが持っているデータをブラウザで保存することができます。
次に掲示板にアクセスしたとき、ブラウザ自身に保存されているクッキーの情報をサーバーへ送ります。これによりサーバーは同じ情報を再利用することができます。クッキーはブラウザ内部に保存されているので、ブラウザの画面を閉じても情報がきえることはありません。
クッキーの保存
それでは早速、掲示板で名前欄を保存するようにしてみましょう。
名前データを受け取ってクッキーに保存するのは、データベースに書き込みするwrtite.phpで行います。write.phpの必須項目チェックの後に、setcoolie~を追記します。
write.php
if(!preg_match(“/^[0-9]{4}$/”, $pass)){ header(“location: bbs.php”); exit(); } | 必須項目のチェック(パスワードは4桁の数字であるかチェック) |
setcookie(‘name’, $name, time() + 60*60*24*90) | 名前をクッキーにセット。setcookie関数はブラウザに対してクッキーを発行して保存させる関するです。 書式は「setcookie(クッキーの名前、保存する値、有効期限のタイムスタンプ)」 第一引数のクッキーの名前は必須。第二引数以降は省略可能。第三引数でクッキーの有効期限を決められます。 有効期限は指定しなければ自動的にゼロがセットされ、ブラウザを閉じたときに有効期限が切れることになります。 現在のタイムスタンプであるtime()に、60秒*60分*24時間*90日を足した日時である、「90日後まで有効」との指定になります。 |
クッキーの読み込み
次は、保存したクッキーを読み取って利用するためのコードを書き修正しましょう。
掲示板であるbbs.phpファイルを修正し、掲示板の書き込みフォームを表示する際に、名前のテキストボックスにクッキーから読み取った値を表示させます。
bbs.php
<?php if(isset($_COOKIE[‘name’])){ $name = $_COOKIE[‘name’]; }else { $name =””; } ~省略 | クッキーはスーパーグローバル変数である$_COOKIEで扱います。 isset関数で$_COOKIE[‘name’]が存在するか確認し、あれば$nameに代入します。存在しなければ空欄にします。 |
<!DOCTYPE html> <html lang=”ja”> ~省略 <div class=”form-group”> <label>名前</label> <input type=”text” name=”name” class=”form-control” value=”<?php echo $name ?>”> </div> | 書き込みフォームの名前のテキストボックスにvalue属性を追加し、あらかじめ文字列が入力された状態にします。 |
これで、ユーザーが名前を入力する手間を省くことができました。
便利な一方で、いくつか注意しなければならないことがあります。
クッキーの注意点
容量の大きい情報を入れない
クッキーが保存できる容量は4キロバイトほど。文字数にすると2000文字程度となり、大きなデータは保存できないので注意が必要。
重要な情報を入れない
クッキーはブラウザに保存されるため、重要な情報を入れないようにしましょう。パスワードのような重要情報はデータベースなどを使い、サーバ側のプログラムを通して扱うことにしてクッキーには保存しないようにしましょう。
内容が書き換えられると困る情報を入れない
クッキーが保存されている場所はユーザーのブラウザなので、なんらかしかの方法で書き換えることができてしまいます。なので入力補助のような活用で「ユーザーのため少し便利にする」という目的で使うのが無難です。