PHPでクッキーを使おう

nesys Add comments
add to hatena hatena.comment (1) add to del.icio.us (1) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 2

基本

PHPでクッキーを使うには単純にsetcookie関数を使えばよい。

PHP: setcookie - Manual
http://jp.php.net/manual/ja/function.setcookie.php

特筆すべきは、setcookie関数の第3引数に入れるexpireの値だろう。
expireにはUNIX TIME形式の有効期限の時間を入れる必要があるわけだが、time()関数から現在時刻をUNIX TIME形式で取得できるため、1時間後を有効期限としたい場合は、time()+60*60のような秒時間で指定してやる必要がある。

また、クッキーの値を削除したい場合はこのexpireの値を過去の時間としたらよい。time()-1でもよいのだが、0を入れるほうがシンプルに済むだろう。

応用

複数ページに跨って持続させたいデータをPHPでは主にセッションで保存されるわけだが、2通りほどクッキーを使うのに適した場合がある。

  • ブラウザを閉じた後でも長期的にデータを保持したい場合
  • JavaScriptと連動させたい場合

ブラウザを閉じた後でも長期的にデータを保持したい場合

このブラウザを閉じた後も長期的にデータを保持したい場合というのも主にログイン情報に限定されるため、その場合について考えてみよう。

クッキーにデータを保持して、expire値を十年後などと設定することで半永久的にそのデータを残すことができる。
しかし、ログイン情報などに関しては、クッキーにその値を生で入れることは言語道断、絶対にやってはならないことだ。
何故なら、クッキー値はユーザーローカル環境下に保持されるデータであるため、容易に書き換えることが可能で、ログイン情報をクッキーに保持している場合、簡単に他のアカウントにログインしたり、または自分のログイン情報が流出する可能性が高いからだ。

ではどうしたらよいか?セッションとデータベースを利用しよう。

まずブラウザを開いている間のアクティブなデータの保持はサーバー側のセッションに保持させたらよい。

セッションの仕組みとは、クッキーのようなデータをローカル下ではなく、サーバー下に保持し、ローカルのクッキーではそのサーバーにあるたくさんのセッションデータの中のどれが自分のものなのかというIDキーを保持させて参照する仕組みになっている。詳しく知りたかったら調べてくれ。

アクティブなログイン情報をセッションに保持させ、同時にデータベースにもsession_encode()したデータを入れておき、そのテーブルの主キーにはユニークで推測不可能な文字列を使用して、その文字列をクッキーにも保持し、まさにセッションの仕組みそのものをプログラムして作り上げようということだ。

もしも、クッキーにその値がある場合、データベース照会を行い、マッチするようであれば、session_dencode()でログイン情報をセッションに戻すというような仕組みが出来上がる。

JavaScriptと連動させたい場合

もう1つクッキーを主に使う場合とはJavaScriptとの連携において、だ。
JavaScriptのデータはすべてローカルのブラウザ上で保持されるわけだが、そのデータをPHPのプログラム側でも使いたいという場合がよくある。例えばソート基準だとか表示する件数の値だとか、そういったJavaScriptによるAjax的な動きをした際に、PHPによる再描写をする場合にもそのJavaScriptによる変化を保持させたい。

では、どうやってJavaScriptの値をPHPに渡すのか?という答えが、クッキーを利用するわけだ。

まぁ例を出すまでもなく、分かり切ったことだろう。

とまぁ至極当然な話を書いてみたのだが、どうもそのシステムアルゴリズムの説明が難しいなぁ……
図などを用いたほうが圧倒的に分かりやすいのだろうが、準備するのもめんどうなので、機会があれば、それぞれのアルゴリズムを図で細かく説明しようかな。

Leave a Reply

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン