Cookieを体験してみよう①

publicディレクトリに、cookie1.phpcookie2.phpcookie3.phpcookie4.phpを作成してください。

サーバから生成されたCookieがブラウザにて保存される

まずは、サーバにリクエストを送信して、Cookieを生成する流れをcookie1.phpcookie2.phpで体験してみましょう。

◆cookie1

ブラウザ(クライアント)からApacheサーバに cookie1.php へのリクエストを送信します。 Apacheサーバは cookie1.php のHTMLをレスポンスしますが、この時点ではまだCookieは生成されていません。 イラストで表すと以下のようになります。


ブラウザは、cookie1.php の内容を画面に表示します。(下図はユーザー名「神戸」を入力した状態)


cookie1.php

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Cookie1</title>
</head>

<body>
  <h3>Cookie1</h3>
  <form method="POST" action="cookie2.php">
    ユーザー名:<input type="text" name="user_name">
    <input type="submit" value="送信">
  </form>
</body>

</html>

この画面で、ユーザー名に「神戸」と入力し、送信ボタンを押すと、cookie2.phpにデータが送信されます。

◆cookie2

cookie2.php は、受信した「ユーザー名」の値(神戸)をもとにクッキー名cookie_name でCookieを生成します。 そして、「神戸さん、ようこそ!」のHTMLとともに、生成したCookieをクライアントにレスポンスします。

ブラウザは、送信されてきたCookieを保存し、cookie2.php の内容を画面に表示します。イラストと画面表示は次のようになります。



「クッキーデータを確認する」リンクをクリックすると、保存したCookieデータとともに cookie3.php へのリクエストをApacheサーバに送信します。(保存したデータとは、クッキー名:cookie_name、値:神戸の組み合わせ)

cookie2.php

<?php
if (isset($_POST['user_name'])  &&  $_POST['user_name']  !=  '') { // ① 
  $user_name  =  $_POST['user_name']; // ②
  setcookie('cookie_name',  $user_name,  time() + 10, '/'); // ③
}
?>

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Cookie2</title>
</head>

<body>
  <h3>Cookie2</h3>
  <?php
  if (isset($user_name)) {
    echo '<p>' . $user_name . 'さん、ようこそ!</p>';
    echo '<a href="cookie3.php">クッキーデータを確認する</a>';
  } else {
    echo '<p>名前が入力されていません。</p>';
    echo '<a href="cookie1.php">cookie1.phpに戻る</a>';
  }
  ?>
</body>

</html>

【解説】

①: if(isset($_POST['user_name']) && $_POST['user_name'] != '') {
パラメータ名 user_name でデータが送られてきていることを確認しています。

  • isset($_POST['user_name'])
    • PHPの isset( ) 関数で、 $_POST['user_name'] の値があれば True を返します。
  • $_POST['user_name'] != ''
    • $_POST['user_name'] の値が「空文字」でなければ True を返します。

②: $user_name = $_POST['user_name'];
パラメータ名 user_name で送られてきた値を取得しています。

③: setcookie('cookie_name', $user_name, time( ) + 10, '/');
送られてきた値をクッキー名 cookie_name で保存するクッキーデータを用意します。 このとき、第3引数の time( ) + 10 でクッキーの有効期限を設定しています。

time( ) 関数は、PHPで定義されている関数で、現在時刻をUnixエポック(1970年1月1日 00:00:00 GMT)からの 通算秒 として返す関数で、time( ) + 10 で現在時刻から10秒間だけ有効なクッキーとしています。 以下はもう少し複雑な例です。

  • 有効期限を現在時刻から3日間とする場合

    time( ) + 60 * 60 * 24 * 3
    // ※60(秒) * 60(分) * 24(時間) * 3(日) = 259,200(秒)
    

有効期限を指定しない場合は、クライアント側のブラウザが閉じられると消えてしまうクッキーとなります。

この時点で、生成されたCookieは、ブラウザに保存されるので、ブラウザの「F12」キーを押してデベロッパーツールを開き、「アプリケーション」タブの「Cookies」を選択すると、以下のように表示されます。 生成されたCookieの値が日本語の場合は、添付画像のようにブラウザでエンコードされて表示されます。