Cookie
Cookie:入力されたIDを次回アクセス時まで覚える仕組み
- クッキーは、保存できるデータのサイズや数がブラウザによって異なります
- 多くのブラウザは、概ね「1サイト」につき、最大20個、4096バイトまでとなっています
- クッキーには、有効期限があり、サーバのプログラム内で有効期限を設定する必要があります
- クッキーの有効期限が過ぎると、自動的にクライアントのブラウザがそのクッキーを削除します
変数との違い
- 入力されたIDを次回アクセス時まで覚える仕組み
- いままで利用してきた変数は、保存期間に「Webページが表示されるまで」という制限があります
- そこで利用するのが「クッキー」と「セッション」です
《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> <style> h1 { font-size: 20px; } dt { font-weight: bold; } dd { margin-bottom: 30px; } </style> </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" size="25" value="<?php print $myId; ?>" autofocus placeholder="例:abcd 半角英字4文字"></dd> <dt>パスワード</dt> <dd><input type="password" name="password" id="password" size="25" placeholder="例:1234 半角数字4桁"></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>
setcookie関数
- クッキーは、スクリプトによる他のあらゆる出力よりも前に 送信される必要があります
var_dump
- 変数に関する情報をダンプする(引数として指定した変数の内容や命令の返値を画面上に出力)
- 複数の変数や命令を確認したい場合は、引数をカンマで区切って指定することも出来ます
var_dump( $a, $b );
isset関数
- 変数がセットされていること、そして NULL でないことを検査する
- isset() はそれらすべてがセットされている場合にのみ TRUE を返します
empty と isset
- empty() 無いかどうか
- isset() あるかどうか
- ある変数に値が代入されている場合に、それを「値が入っている」ということも「空ではない」ということもできます
- 「空ではない」というのは、本来値が入っていなければならないものに、きちんと値が入っているかを確認する
- 「値が入っている」というのは、空であってもかまわないが、現在はたまたま値が入っている
空の場合にエラーメッセージを表示する
- empty
Cookieの情報があれば
- isset
<?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> <style> h1 { font-size: 20px; } </style> </head> <body> <h1>入力されたIDを次回アクセス時まで覚える</h1> <?php var_dump( $myId ); //IDの値が取得されているかチェック ?> <p><?php print $message; ?></p> <p><a href="./input.php">戻る</a></p> </body> </html>
ポイント
- setcookie関数は、すべての先頭にプログラムを記述します
- 3番目のパラメータまでで利用可能
- 「保存期間」は、タイムスタンプ形式で指定(1970年1月1日からの経過秒数)
- 60秒×60分×24時間×14日で2週間後を指定
- 1番目のパラメータだけを指定した場合は、「その内容を削除する」関数に変わります
- 「setcookie( 'my_id' );」で、チェックボックスにチェックが入っていない場合、Cookieの内容を削除しています
- Cookieに情報が保存されると、「$_COOKIE」という特殊な配列で、それを取り出すことができます
- isset関数を使って、Cookieの内容が保存されているかを確認します
- 入っていれば、その値を変数に記憶させます
- その内容おテキストフィールドの「value属性」に表示させれば、Cookieの内容が再現されることになります
- 値を入力していない場合は、以下のように表示されます
訪問回数の確認
《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> <h1>ようこそ!!</h1> <h2> <?=$message ?> </h2> </body> </html>
クッキー情報の設定
- クッキー情報をクライアント側に保存してもらうには、「setcookie関数」を使用します
- setcookie関数の引数には、保存するクッキーの名前、クッキーの値、クッキーの有効期限(クッキーを破棄する日時)を設定します
setcookie( クッキーの名前 , クッキーの値 , クッキーの有効期限 );
- 第3引数のクッキーの有効期限は、クッキーをいつ破棄するかの指定日時を示すタイムスタンプを指定します
- 有効期限は省略可能ですが、省略したり、ゼロを指定すると、そのクッキーはブラウザが終了すると自動的に破棄されます