setcookie

setcookie -- クッキーを送信する

説明

int setcookie(string name, string value, int expire, string path, string domain, int secure);

setcookie は、その他のヘッダ情報と共に 送信するクッキーを定義します。name を除くすべての引数はオプションです。 クッキーは他のヘッダーを送信する前に送信 される必要があります。(これはクッキーの制約であってPHPの制約では ありません)この制約により <html> または <head> タグの前にこの関数をコールする 必要があります。

引数 name 以外の全ての引数はオプションです。 name 引数のみが指定された場合、name という名前のクッキーはリモート クライアントから削除されます。 全ての引数に関して引数の指定をスキップするために空文字列 ("")とすることが可能です。 expireおよび secure 引数 は空文字列でスキップすることはできません。代わりにゼロ (0)を使用してください。 expire引数は、 time または mktime 関数により 返されたUNIX標準時を現す整数です。 secureは、クッキーがHTTPS接続によってのみ 伝送されることを指定します。

陥りやすい失敗:

クッキーはクッキーを有効にするためにページを再ロードするまで アクセスすることができません。

同じスクリプトでsetcookieを複数回コールした場合、 逆の順番で実行されます。他のクッキーを挿入する前に あるクッキーを削除しようとする場合、削除する前に挿入を行う必要が あります。

いくつかの例を以下に示します。

例 1. setcookie の例


setcookie("TestCookie","Test Value");
setcookie("TestCookie",$value,time()+3600);  /* 1時間で期限切れ */
setcookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);

クッキーの value 部分は、クッキーの送信を行う際に自動的に URL エンコードされ、またクッキーを受信した際は、自動的にデコード されてクッキー名と同じ名前の変数に格納されます。すなわち、 スクリプト内部でテスト・クッキーの内容を見たい場合は、単に以下の例の うちの一つを使用して下さい。


echo $TestCookie;
echo $HTTP_COOKIE_VARS["TestCookie"];

クッキー名で配列を記述することにより、クッキーの配列を設定することも可能です。 これにより配列要素と同数のクッキーを設定されますが、 クッキーがスクリプトに受信された際に、値はクッキー名を有する配列に置きかえられます。


 setcookie( "cookie[three]", "cookiethree" );
 setcookie( "cookie[two]", "cookietwo" );
 setcookie( "cookie[one]", "cookieone" );
 if ( isset( $cookie ) ) {
    while( list( $name, $value ) = each( $cookie ) ) {
 	  echo "$name == $value<br>\n";
    }
 }
 	  

クッキーに関する詳細は、http://www.netscape.com/newsref/std/cookie_spec.html にある Netscape のクッキーに関する仕様をご覧ください。

サービスパック 1 を適用した Microsoft インターネットエクスプローラ 4 は、パスに関するパラメータを設定したクッキーを正確に処理することが できません。

Netscape Communicator 4.05 および Microsoft Internet Explorer 3.x は path と time が設定されていない場合、クッキーを正確に処理する ことができないようです。