cookie(メモ)


cookieという仕組みを使ってできること

・フォームに一度入力したメールアドレス等を、次回以降フォームに自動的に表示させる(今回これやります)
・ECサイトなどで以前買った(もしくは閲覧した)商品などを覚えて置いてくれる
・webサイトにて何回目の訪問かを表示させる...etc

なぜcookieを使うのか

簡単に順を追って説明

①まずwebページがブラウザに表示されるのは、クライアントがサーバーに「このwebページの情報をください」とリクエストを送り、それを受け取ったサーバーがその情報に関するレスポンスをクライアントに返すという仕組みによって成り立っている。

②しかし、上記のクライアントとサーバーの通信は一回やりとりをするごとに切断されてしまい、以前の情報(状態)を保つことができない。

③そこで、cookieを使いクライアント側で過去に入力した情報や起こしたアクションをブラウザに記憶させておくことで、次回以降もその情報をwebサイト内で再利用できるようにする。

とりあえずcookieに触れてみよう

今回はcookieを使って「IDとメールアドレスの保存ができるフォーム」を作ってみる。

まずは、cookieを使用してないフォームの作成。
cookie1.phpでIDとメールアドレスを入力して、cookie2.phpで入力したIDとメールアドレスをを表示させる。

cookie1.php
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>入力</title>
  </head>
  <body>
    <form action="cookie2.php" method="post">
      <dl>
        <dt>ID</dt>
        <dd><input type="text" name="my_id"></dd>
        <dt>メールアドレス</dt>
        <dd><input type="email" name="email"></dd>
      </dl>
      <input type="submit" value="送信する">
    </form>
  </body>
</html>
cookie2.php
<?php
$my_id=$_POST["my_id"];
$email=$_POST["email"];
?>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <p>あなたのIDは<?php echo $my_id; ?>です</p>
    <p>あなたのメールアドレスは<?php echo $email; ?>です</p>
    <p><a href="cookie1.php">戻る</a></p>
  </body>
</html>

上記の状態だとcookieを使用していないので、cookie1.phpのフォームに情報を入力してから送信ボタンを押し、そのあとcookie2.phpの「戻る」ボタンを押してcookie1.phpに戻ってもフォーム内に先ほど入力したIDとメールアドレスは消去されている。

そこでcookieを利用し、cookie2.phpの「戻る」ボタンを押してcookie1.phpに戻ってもIDとメールアドレスが残された状態にする。

以下、そのやり方

①setcookieを使用し、情報を記録する

setcookieファンクション(cookieをセットするためのもの)を使用し情報を保存した上で「情報を記録しました」と表示。
cookie情報を2週間保存できるように設定。

cookie2.php
<?php
$my_id=$_POST["my_id"];
$email=$_POST["email"];

//cookieに保存
  setcookie("my_id",$my_id,time()+60*60*24*14);
  setcookie("email",$email,time()+60*60*24*14);
  $message="情報を記録しました";
?>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <p>あなたのIDは<?php echo $my_id; ?>です</p>
    <p>あなたのメールアドレスは<?php echo $email; ?>です</p>
    <p><?php echo $message; ?></p>
    <p><a href="cookie1.php">戻る</a></p>
  </body>
</html>

②cookie情報があった場合にフォームに情報を表示させる

$_COOKIE(cookieに保存された情報を取り出すもの)を使いmy_idとemailに関する情報を取り出し、issetでそれらの内容が保存されているかを確認。
それらが保存されていればその値を変数に記憶させる。
最後に、その変数の値をフォーム内のvalue属性に出力させてあげればOK。

cookie1.php
<?php
if(isset($_COOKIE["my_id"])){
  $my_id=$_COOKIE["my_id"];
}else{
  $my_id="";
}

if(isset($_COOKIE["email"])){
  $email=$_COOKIE["email"];
}else{
  $email="";
}
 ?>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>入力</title>
  </head>
  <body>
    <form action="cookie2.php" method="post">
      <dl>
        <dt>ID</dt>
        <dd><input type="text" name="my_id" value="<?php echo $my_id; ?>"></dd>
        <dt>メールアドレス</dt>
        <dd><input type="email" name="email" value="<?php echo $email; ?>"></dd>
      </dl>
      <input type="submit" value="送信する">
    </form>
  </body>
</html>

これでcookieを使ってフォームに入力した情報を保存することができた。