結構cookieは奥が深いのでゆっくり覚えていきましょう!
cookieはログイン認証やカートなどで使用され、
セッションidをユーザー側に設定することでユーザー識別が可能になります。
Menu
・クッキーはユーザーのブラウザに設定されます。
・値を取得したりセットしたりします。
・名前や値など変更して設定できます。
・有効期限の時間設定ができます。
など
【引数】下記はデフォルト
1 2 3 4 5 6 7 | setcookie ( string $name string $value int $expires = 0 string $path string $domain bool $secure = FALSE bool $httponly = FALSE ) |
引数
引数はたくさんありますが必須は$nameのみであとは任意です。
①$name : string(必須)
デフォルトはPHPSESSID(php.iniで変更可能)。クッキーの名前を指定できます。
②$value : string(任意)
クッキーの値を指定できます。
③$expire : int(任意)
デフォルト0。クッキーの有効期限を指定します。指定しない場合はブラウザを閉じるときに削除されます。
60→60秒、60*60→1時間、60*60*24→1日、60*60*24*7→1週間
④$path : string(任意)
デフォルトは、クッキーがセットされたときのディレクトリです。クッキーを保存するパスを指定します。
⑤$domain : string(任意)
クッキーが有効なドメインを指定します
⑥$secure : bool trueかfalse(任意)
デフォルトはfalse。true を指定するとHTTPS接続の場合にのみクッキーを送信します。
⑦$httponly : bool trueかfalse(任意)
デフォルトはfalse。true を指定するとHTTPのみがクッキーにアクセスできJavaScriptなどのスクリプト言語はアクセスできなくなります。
【返り値】bool
クッキーが設定されてるときは true
クッキーが設定されてない場合は false
ブラウザでの確認方法
session_start()を記述することで、クッキーにPHPSSIDという名前のセッションIDが保存されます。
グーグルクロームの例
ショートカットキー
F12
Application→Cookies
Cookieの設定が確認できます。
クッキーの設定
サイトのログインやアフィリエイトIDなどに使用し期間なども設定できます。
例)
保守しやすいように連想配列の値だけ変えれば変更できるようにしたりもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //setcookieの引数を連想配列 $s_ary=[ 'name' => 'test', //名前 'value' => '', //値 'expire' => 60, //60秒 'path' => '/', //現在のディレクトリ 'domain' => '', //指定した配下に適用される 'secure' => false, //trueでhttpは設定されない 'httponly' =>false ]; //クッキーをセットする setcookie( $s_ary['name'], $s_ary['value'], time()+$s_ary['expire'], $s_ary['path'], $s_ary['domain'], $s_ary['secure'], $s_ary['httponly'] ); |
クッキーの取得
1 | echo $_COOKIE['name']; |
実際はここでエスケープ処理をします。
htmlspecialchars() 関数を使用。
クッキーの削除方法
参考サイト : https://www.php.net/session_destroy
サイトのログアウトの際に使用します。
この際セッションも削除しDB内に保存した値も削除します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie( session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]); } // セッションを破棄 $_SESSION = array(); session_destroy(); |
PHPサンプルコード
クッキーが設定されてなかったらクッキーを20秒で設定して値を確認するコードになります。
コピペで確認できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | <?PHP session_start(); //クッキーの名前(name) $session_Name = 'test'; //クッキーの値(value) $val = 1234; //setcookieの引数を連想配列 $s_ary = [ 'name' => $session_Name, 'value' => $val, 'expire' => 20, //20秒に設定 'path' => '/', 'domain' => '', 'secure' => false, 'httponly' => false ]; //$_COOKIEの変数が定義されていたら if (isset($_COOKIE[$session_Name])) { echo "クッキー" . $session_Name . "の値は" . $_COOKIE[$session_Name] ."で" . $s_ary['expire']."秒に設定されています。<br>"; } else { setcookie( $s_ary['name'], $s_ary['value'], time() + $s_ary['expire'], $s_ary['path'], $s_ary['domain'], $s_ary['secure'], $s_ary['httponly'] ); echo "クッキーが設定されていません。" . "<br>\n"; echo "クッキー" . $s_ary['name'] . "の値を " . $val . " で有効期限を" . $s_ary['expire'] . " 秒に設定しました。<br>"; $week = ['日', '月', '火', '水', '木', '金', '土',]; $a = $week[date("w")]; date_default_timezone_set('Asia/Tokyo'); echo date("Y/m/d($a)H:i:s") . "<br>"; } ?> <!DOCTYPE html> <html lang="jn"> <head> <meta charset="utf-8"> <title>クッキー</title> <script src="https://ajaxzip3.github.io/ajaxzip3.js" charset="UTF-8"></script> <script src="http://code.jquery.com/jquery-3.2.1.min.js"></script> </head> <body> <div id="time"></div> <script type="text/javascript"> // クッキーを表示 function cookie_php() { document.write(document.cookie); location.reload(); } // 時刻をリアルタイム表示 function gettime() { $week = ['日', '月', '火', '水', '木', '金', '土']; let today = new Date(); let yaer = today.getFullYear() let month = today.getMonth() + 1; let day = today.getDate() let todayWeek = $week[today.getDay()] let hours = today.getHours() let minutes = ('0' + today.getMinutes()).slice(-2) let seconds = ('0' + today.getSeconds()).slice(-2) $('#time').html(yaer + "/" + month + "/" + day + "(" + todayWeek + ")" + hours + ":" + minutes + ":" + seconds); } setInterval(gettime, 1000); </script> <input type="button" value="クッキー確認" onclick="cookie_php()"> </body> </html> |
まとめ
このクッキーを使用して個別に値を付与してデータベースにその値を格納しセッションと組み合わせていけばログイン機能が作成できます。
ログイン機能を作成したい方はクッキーとセッションとデータベースを更に勉強してみてください(^O^)
覚えたらいろいろなことが実現できると思います。
以上です。