クッキー

変数との違い

  • 入力されたIDを次回アクセス時まで覚える仕組み
  • いままで利用してきた変数は、保存期間に「Webページが表示されるまで」という制限があります
  • そこで利用するのが「クッキー」と「セッション」です

クッキー

  • クッキーとは、Webサーバがそのサイトを訪れたクライアントのブラウザに一時的にデータを書き込んで保存させる仕組み
  • 例えば、クライアントに関する情報や最後に訪れた日時やそのサイトの訪問回数などを記録します
  • 次に同じクライアントがそのサイトを訪れたときに、保存してあるクッキー情報をサーバが取得し、「3回目のお越しですね。」などのように画面に表示したりできるようになります
  • その他、ログイン画面や掲示板などで、ハンドルネームやアドレスやログインIDなどを一度入力して実行すれば、それ以降入力しなくても表示されるなどの仕組みもクッキーが使われています
Cookie
  • 入力されたIDを次回アクセス時まで覚える仕組み
  • クッキーは、保存できるデータのサイズや数がブラウザによって異なります
  • 多くのブラウザは、概ね「1サイト」につき、最大20個、4096バイトまでとなっています
  • クッキーには、有効期限があり、サーバのプログラム内で有効期限を設定する必要があります
  • クッキーの有効期限が過ぎると、自動的にクライアントのブラウザがそのクッキーを削除します
  • 有効期限を指定した場合、以下のディレクトリに保存されています

C:\Documents and Settings\ユーザアカウント名\Cookies
Windows7の場合、
C:\User\ユーザアカウント名\AppData\Roaming\Microsoft\Windows\Cookies

setcookie関数

  • クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります


setcookie ( クッキー名, 値, 保存期間, ディレクトリ, ドメイン, セキュア接続のみ, HTTPのみの接続 )


《input.php

<?php
if ( isset($_COOKIE[ 'my_id' ]) ) {
	$myId = $_COOKIE[ 'my_id' ];
} else {
	$myId = '';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力されたIDを次回アクセス時まで覚える</title>
</head>
<body>
<h1>入力されたIDを次回アクセス時まで覚える</h1>
<form action="cookie.php" method="post">
<dl>
<dt>ID</dt>
<dd><input type="text" name="my_id" id="my_id" value="<?php print $myId; ?>"></dd>
<dt>パスワード</dt>
<dd><input type="password" name="password" id="password"></dd>
<dt>IDの保存</dt>
</dl>
<p><input type="checkbox" name="save" id="save" value="on"><label for="save">IDを保存する</label></p>
<input type="submit" value="送信する">
</form>
</body>
</html>


cookie.php

  • setcookie関数は、すべての先頭にプログラムを記述します
  • 3番目のパラメータまでで利用可能
  • 「保存期間」は、タイムスタンプ形式で指定(1970年1月1日からの経過秒数)
  • 60秒×60分×24時間×14日で2週間後を指定
  • 1番目のパラメータだけを指定した場合は、「その内容を削除する」関数に変わります
  • 「setcookie( 'my_id' );」で、チェックボックスにチェックが入っていない場合、Cookieの内容を削除しています
  • Cookieに情報が保存されると、「$_COOKIE」という特殊な配列で、それを取り出すことができます
  • isset関数を使って、Cookieの内容が保存されているかを確認します
  • 入っていれば、その値を変数に記憶させます
  • その内容おテキストフィールドの「value属性」に表示させれば、Cookieの内容が再現されることになります
<?php
$myId = $_POST[ 'my_id' ];
$password = $_POST[ 'password' ];
$save = $_POST[ 'save' ];

// Cookieに保存
if ( $save == 'on' ) {
	setcookie( 'my_id', $myId, time() + 60 * 60 * 24 * 14 );
	$message = 'ログイン情報を記録しました';
} else {
	setcookie( 'my_id' );
	$message = '記録しませんでした';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>入力されたIDを次回アクセス時まで覚える</title>
</head>
<body>
<h1>入力されたIDを次回アクセス時まで覚える</h1>
<?php var_dump($myId); ?>
<p><?php print $message; ?></p>
<p><a href="./input.php">戻る</a></p>
</body>
</html>
  • 「$myId」の値を、「var_dump($myId);」で確認しています
  • 値を入力していない場合は、以下のように表示されます


Cookieのセキュリティ
  • setcookie関数の4番目以降のパラメータにセキュリティに関する設定があります


ディレクト

  • ここで設定したディレクトリ配下のみで有効になります


ドメイン

  • ここで設定したドメイン配下のみで有効になります


セキュア接続のみ

  • SSL接続のみ有効になります


HTTPのみの接続

  • JavaScriptなどからのアクセスはできなくなります

訪問回数の確認

《cookies1.php

<?php
  // 訪問回数を格納する変数
  $accessno = 0;
  
  // クッキー情報取得
  if ( isset( $_COOKIE[ "accessno" ]) ) {
      $accessno = $_COOKIE[ "accessno" ];
  }
  
  // 1回分の訪問回数加算
  $accessno++;
  
  //クッキー情報更新
  setcookie( "accessno", $accessno, mktime( 0,0,0,12,31,2020 ) );
  
  // 画面表示用メッセージをリクエストにセット
  $message = "";
  if( $accessno === 1) {
      $message = "はじめてのお越しですね!";
  } else {
      $message = $accessno . "回目のお越しですね!";
  }
  
  // 画面表示用PHP呼び出し
  require_once( "cookies2.php" );


《cookies2.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>クッキーのサンプル</title>
</head>
<body>
<h2>ようこそ!!</h2>
<h4>
<?=$message ?>
</h4>
</body>
</html>
クッキー情報取得
  • クッキー情報の取得は、「$_COOKIE」というPHPグローバル変数を使用します
  • この「$_COOKIE」は、連想配列になっており、キーにクッキーの名前を指定すると該当のクッキーの値を取得できます



$変数 = $_COOKIE[ クッキーの名前 ];

  • 指定したクッキーの名前でクッキー情報が取得できるか否かは、isset関数で判定します
クッキー情報の設定
  • クッキー情報をクライアント側に保存してもらうには、「setcookie関数」を使用します
  • setcookie関数の引数には、保存するクッキーの名前、クッキーの値、クッキーの有効期限(クッキーを破棄する日時)を設定します



setcookie( クッキーの名前 , クッキーの値 , クッキーの有効期限 );

  • 第3引数のクッキーの有効期限は、クッキーをいつ破棄するかの指定日時を示すタイムスタンプを指定します
  • 有効期限は省略可能ですが、省略したり、ゼロを指定すると、そのクッキーはブラウザが終了すると自動的に破棄されます