こんにちは、
最近は圧力鍋を使ったカレー作りにはまっているサトウです。
さて、本題に入りたいと思います。
プログラミングを学習していくと「cookie(クッキー)」という言葉を聞いたことがある方もいらっしゃるのではないでしょうか。ですが「cookie(クッキー)」という名前を聞いたことはあっても、webサービスを作る際にどのような場面で使用できるかよく分からない、という方も多いと思います。今回は「cookie(クッキー)」の考え方や使用方法について分かりやすく解説していきます。
phpを学び始めた方や、「cookie(クッキー)」について分からない方は、是非読んでみてくださいね。
目次
Cookie(クッキー)とは、コンピュータのブラウザ側に一時的にデータを保存できる仕組みです。
「Google Chrome」「Internet Explorer(IE)」「Microsoft Edge」といったwebブラウザには情報(ユーザー情報等)を保存するための小さいメモ帳のような機能が搭載されています。そこに「名前 = 値」の組み合わせで表されたデータが保存されていきます。これがcookieの基本的な仕組みです。
実際のGoogle Chromeに保存されている画像(Google chrome検証ツールで表示)
上記を拡大したもの
※赤枠で囲った「name」「value」がcookie情報です。
Webアプリケーションではデータを保存するには従来はサーバ側に保存するしかありませんでした。しかし、cookieが利用できるようになったことでブラウザ側(クライアント側・ユーザ側)にデータを保存することができるようになりました。
webサイトやインターネットショッピングで使用されるケースがイメージしやすいのではないでしょうか。
・WebサイトにログインするときにIDやパスワードが履歴として表示される場合
・ネットショッピングでカートに入れたものが一定の期間だけ保存されている場合
これらはいずれも、cookieのしくみで動いています。
ユーザにとってはIDや名前等の情報をアクセスする度に入力する必要がなくなくるので、会員制webサイトの閲覧数が増えたり、アプリケーションの利用頻度が向上します。webの世界ではcookieがこのような大きな役割を果たしています。
セッションとは何か
似たような意味合いで「session(セッション)」という概念もあります。
こちらも耳にしたことがある方もいらっしゃるのではないでしょうか。
この記事では以下のsessionとcookieの違いを理解しておけば大丈夫です。
・cookieもsessionも情報を保存するために使用される。
・cookieはクライアント側のマシン(主にブラウザ)にのみ保存され、sessionはブラウザだけでなく、サーバーにも情報が保存される。
・保存の期間も異なり、sessionはユーザーがブラウザを閉じるか、サイトを離れると情報が削除されます。
一方cookieには永続クッキーがあり、情報を保持し続けることも可能です。
cookieの意味を理解できたところで、ここからは実際にphpでcookieを使う方法・書き方を紹介していきます。
phpではクッキーを保存するにsetcookie()という関数を使用します。
setcookie(’cookieの名前’,’保存したい値’)
コード例
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 |
<?php //ここでcookieに情報を入れる setcookie('name','suzuki'); //* 注意 */ //ただし、このsetcookie()を行うのは文字列が表示される前に行わなくてはなりません。 //<html>タグよりも前、何も表示されていない段階で phpタグ内にこれを書きます。 ?> <html> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>cookie</title> </head> <body> </body> </html> </html> |
cookieに有効期限を設定して保存する
setcookieで保存したcookieは、ブラウザを閉じると消えてしまいます。
そこでcookieの有効期限を設定することも必要です。
setcookie(’cookieの名前’,’保存したい値’,’有効期限’)
有効期限はUNIXタイム(ユニックスタイム)で指定します。
UNIXタイムは秒単位で、現在のUNIXタイムは time() 関数で取得できます。
つまり、50秒後まで有効にしたければ time() + 50 と書きます。
以下のコード例では有効期限を2日後にしています。
コード例
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 |
<?php //ここでcookieに情報を入れる //有効期限:60秒*60分*48時間→2日 setcookie('name','suzuki',time()+60*60*48); //* 注意 */ //ただし、このsetcookie()を行うのは文字列が表示される前に行わなくてはなりません。 //<html>タグよりも前、何も表示されていない段階で phpタグ内にこれを書きます。 ?> <html> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>cookie</title> </head> <body> </body> </html> </html> |
保存したcookieを呼び出すには、$_COOKIEを使います。
$_COOKIEはphpで定義済の定義済変数(スーパーグローバル変数)の1つで、以下のような特徴があります。
$_COOKIE は 連想配列として使用する
$_COOKIE は、関数やメソッドの内部で使用する場合、global $_COOKIE; とする必要がない
書き方
echo $_COOKIE[‘配列名’];
コード例
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 |
<?php //ここでcookieに情報を入れる //有効期限:60秒*60分*48時間→2日 setcookie('name','suzuki',time()+60*60*48); //* 注意 */ //ただし、このsetcookie()を行うのは文字列が表示される前に行わなくてはなりません。 //<html>タグよりも前、何も表示されていない段階で phpタグ内にこれを書きます。 ?> <html> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>cookie</title> </head> <body> </body> </html> </html> <?php // $_COOKIEをechoで出力します if(!empty($_COOKIE['name'])){ echo '$_COOKIEの中身は:'.$_COOKIE['name'].'です'; } ?> |
出力結果
使い方自体は非常にシンプルですよね。
参考:phpで使用する主なスーパーグローバル変数
$_COOKIEと同様にphp言語では他にもスーパーグローバル変数があります。
代表的なものは主に以下のとおりです。
PHPで使用可能なスーパーグローバル変数
$_POST:POST形式のHTMLフォームから渡された情報
$_GET:クエリ情報(~?キー名=値)経由で渡された情報
$_SESSION:セッション経由で渡された情報
$_FILES:アップロードされたファイルに関する情報
$_SERVER:リクエストヘッダ、またはサーバ固有の変数情報
$_ENV:サーバ側で定義された環境変数
$_REQUEST:$_GET、$_POST、$_COOKIEの値をまとめて管理
特に$_POSTや$_GETはwebシステムを開発する際には使用することも多い変数です。良ければ参考にしてくみてください。
まとめ
いかがでしたか?今回は、cookie(クッキー)について説明しました。
プログラミングを学び始めた頃は「cookie(クッキー)」と「session(セッション)」の違いが分からず、戸惑う日もあると思います。ですが「cookie(クッキー)」は仕組み自体は非常にシンプルな考え方です。こちらの記事のサンプルコードを参考にして、是非書き方も練習してみてください。
この記事が、phpの学習に役立つと嬉しいです。