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 の内容を格納した連想配列)でもアクセスできます。
public class Cookie extends Object

構造

PHP 4
org/purl/net/osamurai/class/Object.php
org/purl/net/osamurai/http/Cookie.php
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);
?>

注釈