HTTP Cookies
Cookieについて。
Cookieとは?
Cookieとは、サーバから送られた(CGIスクリプト等の)情報をクライアント側(ブラウザ等)に保存させ、次回の交信時にその状態を回復させるという技術です。この技術ははじめ、Netscape Communication 社によって提案されました。
元来HTTPでは、その性質上基本的に状態(情報)を保持する事はできません。ところが、WWWの普及と共にHTTPが様々な場面(インターネットショッピングや有料サービス等)で利用されるにつれて、その特性(状態が保持できない)が不便となる場面が出てきました。そこで、状態を管理するためにそれまで使われた代替手段(URL中の状態をエンコードしておく等の手段)では無く、ユーザ一人ずつの状態をクライアントに保持するために開発された技術がクッキーなのです。
次の例は、PHPにてクッキーを送信する例です。
<?php
setcookie ("TestCookie", "xyzzy", time()+3600, "/foo", ".example.com", 0);
?>
上の例では、exapmle.com
の全てのサブドメインでクッキーを有効とする為に .example.com
をセットしています。このクッキーが有効となるパスは /foo
なので、クライアントがこのサーバの /foo
にアクセスすると xyzzy
という値が送信されます。そしてクッキーの有効期限は一時間後に設定されています。
上の例のように送信されたクッキーの内容は、次の例のように定義済の変数$_COOKIE
にクッキーの名称を指定することで見る事ができます。
<?php
echo $_COOKIE["TestCookie"];
?>
注釈
- PHP 4.1.0 より以前のバージョンの場合は、
$_COOKIE
ではなく$HTTP_COOKIE_VARS
を使用します。 - PHP 4.1.0 以降のバージョンでは、
$_REQUEST
配列($_GET
,$_POST
,$_COOKIE
,$_FILES
の内容を格納した連想配列)でもアクセスできます。
Cookie
クラス
public class Cookie extends Object
構造
- PHP 5
http/Cookie.php
コンストラクタ
public void Cookie(String $arg_1 [, String $arg_2 [, String $arg_3 [, Integer $arg_4]]])
- クッキーの操作を行います。
- 引数
String $arg_1
- クッキーの名前。
String $arg_2
- サーバー上での、クッキーを有効としたいパス。デフォルト値はクッキーがセットされたときのカレントディレクトリ。
String $arg_3
- クッキーが有効なドメイン。
Integer $arg_4
- セキュア設定 [
0
=デフォルト|1
=セキュアなHTTPS接続の場合にのみクッキーを送信]
メソッド
public Boolean putCookie( Array $arg_1 [, Integer $arg_2] )
public Boolean putCookieBySerialize( Array $arg_1 [, Integer $arg_2] )
- クッキーを格納する。
- 引数
Array $arg_1
- クッキーに格納する配列。
Integer $arg_2
- クッキーの有効期限。
- 返り値
setcookie()
が正常に実行されるとTRUE
、失敗するとFALSE
を返す。
public Array getCookie()
public Array getCookieByUnserialize()
- クッキーを取得する。
- 返り値
- クッキーの文字列を配列に置換して返す。
public void delCookie()
- クッキーを削除する。
- 返り値
- クッキーの削除に成功すると TRUE 、失敗すると FALSE を返す。
クラスの使用例
次の例は、Cookie
クラスを使用したサンプルです。
<?php
// ファイルの読み込み
ini_set("include_path", "./");
// require_once("org/purl/net/osamurai/http/Cookie.php"); // for PHP 4
require_once("http/Cookie.php"); // for PHP 5
// new演算子によりクッキー用の変数を作成
// 引数には、クッキーの名前をstring型で指定する。
$cookie = new Cookie("COOKIE_NAME");
// 以下は通常の値
$cookies["name"] = "名無しさん";
$cookies["email"] = "foo@example.com";
$cookies["url"] = "http://www.example.com/";
// 以下は配列
$cookies["like"][] = "design";
$cookies["like"][] = "program";
$cookies["like"][] = "cigarette";
// 日本語もOK
$cookies["hate"][] = "お金";
$cookies["hate"][] = "自分";
// クッキー格納(配列→文字列)
$cookie->putCookie($cookies);
// クッキー取得(文字列→配列)
$cookies = $cookie->getCookie();
// ※シリアル化表現を行いたい場合には、上記ではなく下記の方法で・・・。
// クッキー格納(シリアル化)
//$cookie->putCookieBySerialize($cookies);
//
// クッキー取得(非シリアル化)
//$cookies = $cookie->getCookieByUnserialize();
// 取得したクッキーの値の確認
print_r($cookies);
// クッキー削除
$cookie->delCookie();
// 不必要ならば、変数の割当を解除する。
//unset($cookie, $cookies);
?>
注釈
Cookie に複数の値を保持するときに!
を参考に、ちょっとだけ手を加えてクラス化したものです。- ご利用の際の注意事項などもご覧下さい。