クッキーを送受信する

 クッキーはWebブラウザーに少量のデータを保存しておくことができる仕組みです。クライアント側にデータを保存しておき、クライアントからのリクエストと一緒にクッキーのデータを送信します。サーバーはそのリクエストと共にデータを受信して処理することができます。

クッキーのイメージ
クッキーのイメージ

 phpでクッキーを使うには「$_COOKIE」変数を利用します。またクッキーにデータを保存するには「setcookie」関数を利用します。

関数名 setcookie
パラメーターリスト
パラメター名 説明
string $name クッキー名
string $value = “” クッキーに保存する値
string $expires = 0 クッキーの有効期限
返り値
bool 正常に実行されるとTRUE、失敗した場合FALSE
setcookie関数の仕様

○ ファイル

 「POSTTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。

ファイルの種類 PHPファイル
ファイル名 CookieForm.php

サンプルダウンロード

○ プログラム

 次のようにプログラムを記述してください。

CookieForm.php

  1. <?php
  2. //ユーザー名のクッキー情報を取得する
  3. if(isset($_COOKIE['user_name'])){
  4.  $user_name = $_COOKIE['user_name'];
  5. }else{
  6.  $user_name = '';
  7. }
  8. //名前のクッキー情報を取得する
  9. if(isset($_COOKIE['name'])){
  10.  $name = $_COOKIE['name'];
  11. }else{
  12.  $name = '';
  13. }
  14. //Emailのクッキー情報を取得する
  15. if(isset($_COOKIE['email'])){
  16.  $email = $_COOKIE['email'];
  17. }else{
  18.  $email = '';
  19. }
  20. ?>
  21. <!DOCTYPE html>
  22. <html>
  23.  <head>
  24.   <meta charset="UTF-8">
  25.   <title>データ入力フォーム</title>
  26.  </head>
  27.  <body>
  28.   <p>ユーザー情報をクッキーに保存する</p>
  29.   <form action="CookieTest.php" method="POST">
  30.    ユーザー名:
  31.    <input type="text" name="user_name" value="<?php print($user_name); ?>">
  32.    <br>
  33.    名前:
  34.    <input type="text" name="name" value="<?php print($name); ?>">
  35.    <br>
  36.    Email:
  37.    <input type="email" name="email" value="<?php print($email); ?>">
  38.    <br>
  39.    <input type="checkbox" name="save" checked>情報を保存する
  40.    <br>
  41.    <input type="submit">
  42.   </form>
  43.  </body>
  44. </html>

○ 解説

 3、10、17行目で、isset関数を使用しています。この関数は引数で指定した変数が存在しているかどうかを確認できます。存在していればTRUEを、存在していなければFALSEを返します。今回は、クッキー情報が存在していれば、クッキー情報をそれぞれのデータ用の変数に格納し、存在していなければ、それぞれのデータ用の変数に空文字列をセットしています。

 それぞれのデータ用変数の内容を33、36、39行目のテキストボックスのデフォルト値として表示するようにしています。これにより、クッキーに情報があれば入力フォームに前回入力した内容が表示されるようになります。

 次に、送信されたフォームデータをクッキーに保存するプログラムを作成しましょう。

○ ファイル

 「POSTTest.php」ファイルをコピーして、次のPHPファイルをプロジェクトに追加してください。

ファイルの種類 PHPファイル
ファイル名 CookieTest.php

サンプルダウンロード

○ プログラム

 次のようにプログラムを記述してください。

CookieTest.php

  1. <?php
  2. //チェックボックスがチェックされているかどうか
  3. if(isset($_POST['save'])){ //チェックが入っている場合
  4.  $expires = time() + 300; //5分間有効
  5. }else{ //チェックが入っていない場合
  6.  $expires = time() - 60; //過去に設定することで無効(削除)にする
  7. }
  8. //クッキー情報登録
  9. setcookie('user_name', $_POST['user_name'], $expires);
  10. setcookie('name', $_POST['name'], $expires);
  11. setcookie('email', $_POST['email'], $expires);
  12. ?>
  13. <!DOCTYPE html>
  14. <html>
  15.  <head>
  16.   <meta charset="UTF-8">
  17.   <title>クッキー登録</title>
  18.  </head>
  19.  <body>
  20.   <p>クッキー情報を登録しました。<p>
  21.   <a href="CookieForm.php">入力フォームに戻る</a>
  22.  </body>
  23. </html>

○ 実行結果

実行結果
実行結果

○ 解説

 3行目で、フォームで選択された「情報を保存する」チェックボックスの値を調べています。チェックが入っていればポストデータで送信されてくるため、isset関数でTRUEが返ってきます。その場合は$expires変数に現在から5分後の時間のデータを格納しています。FALSEの場合は$expires変数に現在から1分前の時間のデータを格納しています。

 10~12行目で、setcookie関数を使ってクッキー情報を格納しています。第1引数にクッキー名、第2引数に保存するデータ、第3引数に有効期限を渡しています。これによりサーバーからWebブラウザーにレスポンスが返る時に、Webブラウザーにクッキーを操作する情報も一緒に渡されることになります。

 有効期限は省略したり、0を設定したりするとクッキーはWebブラウザーを閉じるまでが有効期限となります。未来の時間を指定すると、その時間までクッキーは保持され、過去の時間を指定するとクッキーは有効期限切れとなり、Webブラウザーからクッキーが削除されます。

○ 実行結果(有効期限を過去にした場合、有効期限が切れた場合)

実行結果
実行結果

○ 解説

 入力フォームで「情報を保存する」チェックボックスのチェックを外した状態で送信すると、過去の有効期限がセットされ、入力フォームに戻ると入力内容が消えていることを確認できます。また、入力フォームにクッキーのデータが表示されている状態で、5分後にWebブラウザーを更新しても、入力内容が消えていることを確認できます。

前へ   次へ