プログラミング入門

クッキーについて知ろう

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