カテゴリー
PHP

クッキーについて知ろう

この章ではクッキーについて説明します。
ブラウザとサーバ間のやり取りにおいて、入力内容やユーザーの情報、アクセスした回数などをユーザーのパソコン内部のハードディスクに保存する仕組みをクッキーといいます。
つまり、サーバからのデータをパソコンに保存するしくみです。
通信というのはページを移動するたびに1回接続を切断してから、また接続し直すという行為を繰り返すので、ページ間でデータの引継ぎはできません。
しかし、クッキーと言う仕組みを使うことでデータをパソコン内部に保存することが出来ますので、ページ間の受け渡しが可能になります。
皆さんはショッピングサイトでお買い物をしたことがあると思いますが、1回目は名前などの個人情報を入力しますが2回目アクセスしたときには改めて名前などを入力しなくても、すでに入力されている状態になっているという経験をしたことがあると思いますが、これはクッキーという機能を利用しているのです。
以下の図で詳しく説明します。1 初めてサイトなどにアクセスしたときは以下の順序で進みます。
①ブラウザからサーバへリクエストします。
②次にサーバでクッキーを発行してブラウザ側にレスポンスします。
setcookieでブラウザにクッキーをセットします。setcookieについては後ほど説明します。
③ブラウザはサーバからのクッキー情報を記録します。
初めてのアクセス時にはまだクッキーはブラウザからサーバに送られません。
2回目のアクセス時にはクッキーがすでにセットされているのでサーバに送られます。
次は2回目の訪問した時について説明します。
①今度は上記3で保存したクッキーをサーバに送ります。
②サーバはこのクッキーを参照してクッキーの値を取得します。
ブラウザから送信されたクッキー情報は1で取得できます。
$_COOKIEについては後ほど説明します。
③クッキーに応じて情報やデータを表示する。
では例を見てみましょう。
以下のファイル名は1です。1111112015-05-06_18105411下のファイル名は1です。2015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_1810542015-05-06_181054
Lesson29.phpで名前とメールアドレスなどを入力フォームから2015-05-06_181054に送ります。
初めてLesson29.phpにアクセスした場合には以下の画面が表示されます。2015-05-06_181054 このフォームに名前などを入力して2015-05-06_181054をクリックしますと2015-05-06_181054にデータが送られます。
結果は以下のように表示されます。2015-05-06_181054
次にこの状態からブラウザの戻るボタンで2015-05-06_181054に戻ってください。
この後にブラウザの更新ボタンをクリックしてください。
クッキーを設定していない状態では何もデータは残りませんが、クッキーを設定すると以下のように名前、メールアドレスにデータが残ります。2015-05-06_181054 どのようにクッキーを設定するかを説明します。
PHPでクッキーを発行するにはsetcookie関数を使います。
このsetcookie関数をデータの送り先であるLesson30.phpの中で使用しています。
この関数で名前などの情報をブラウザに保存します。
setcookie関数は正常にクッキーが発行されたらTRUEを、失敗したらFALSEを返します。
setcookie関数の構文は以下の通りです。2015-05-06_181054 setcookie注意点としてはsetcookieの設定は2015-05-06_1810542015-05-06_181054や空白などあらゆる出力よりも前にsetcookieを記述してください。
そうしないと2015-05-06_181054というエラーが出ます。
ですので、この例ではHTMLのタグより前にsetcookie関数を記述しています。
では例を見てみましょう。2015-05-06_181054 「クッキー名」には好きな名前を付けます。例えばメールアドレスに関係しているのならばsetmailなどと付けます。
「保存したい内容(値)」には保存したい値を記述しますが、
この例では2015-05-06_1810542015-05-06_181054を指定しました。
これらはフォームに入力したデータです。
「有効期限」には2015-05-06_181054を指定しました。
これは1分を意味します。
time()は関数ですが、この関数は1970年1月1日00時00分00秒からの経過秒数を返す関数です。
つまり、この例の場合にはクッキーの有効期限は1分で、それを過ぎますとデータの保存は消えます。
他に以下の時刻を設定できます。2015-05-06_181054 setcookieのその他の引数の意味は以下の通りになります。
「クッキーが有効なパス」は今回は省略していますが、デフォルトではカレントディレクトリとなります。
以下の通り2015-05-06_181054を指定すると今の演習の環境であればlocalhostの下で有効になります。2015-05-06_181054 また、以下の通り2015-05-06_181054などと指定するとuserディレクトリとその下のディレクトリのみ有効になります。2015-05-06_181054 [クッキーが有効なドメイン] は今回は省略していますが、例えば以下の通り2015-05-06_181054というドメインを設定すると、そのサブドメインすべてでクッキーを有効にできます。2015-05-06_181054 「SSLフラグ」は今回は省略していますが、trueを設定するとJavaScript のようなスクリプト言語からはアクセスできなくできます。
しかしながら、このSSLフラグは全てのブラウザでサポートされているわけではありません。
次にその保存したクッキーのデータを取得する方法について説明します。
保存したクッキーのデータを取得するには2015-05-06_181054を使用します。2015-05-06_181054 「クッキーの名前」はsetcookie内の先頭の引数を書きます。2015-05-06_181054 この例では以下の箇所でクッキーのデータを取得しています。2015-05-06_181054 では具体的にこのプログラムについて説明します。
初めに2015-05-06_181054にアクセスする時には2015-05-06_181054には何もデータが入っていないので、else以下のプログラムに移動します。
つまり、カラのデータが代入されます。
2回目のアクセスの時には$nameと$mailにデータが代入されます。2015-05-06_181054 そして、次に保存したデータをフォームのテキスト欄に表示させたいのでvalue属性の箇所にクッキーで取得したデータが入っている$nameや$mailを記述しています。
それをprintで出力しています。
これで改めて最初から入力しなくても、以前入力したデータが表示されるようになります。2015-05-06_181054
次にクッキーを削除する方法について説明します。
クッキーはセキュリティの観点からずっと保存しておくのは良くありません。
そこである一定の時間が過ぎたら削除するのが良いでしょう。
この例ではクッキーを削除するために新たに2015-05-06_181054を作成しました。2015-05-06_1810542015-05-06_181054 Lesson29.phpに以下の「クッキーを削除する」というリンクがありますので、これをクリックすると2015-05-06_181054のリンクに飛んでクッキーを消すことが出来ます。2015-05-06_181054 「nekota1.php」に飛びますと以下の2行が書いてありますが、setcookieの有効期限に過去の時間を設定することにより、クッキーを削除しています。2015-05-06_181054 この例では2015-05-06_181054に設定しています。
クッキー名には消したいクッキー名を記述し、保存したい内容(値)には2015-05-06_181054を記述します。
これでクッキーが削除されたので、戻るボタンを押して、フォームの入力画面に戻ってください。名前、メールアドレスのデータが消えているのが分かります。