HOME   入り口   MENU


No22.クッキーはいかが? ---- setcookie




掲示板などのお名前、メールアドレスなどを保存するのよく使われるのがCookie.
PHPではクッキーを送信するときに自動的にエンコード、
受信するときに自動的にデコードしてくれるのでとても便利です。(^_^)
数値(1:成功 or 0:失敗)=setcookie(保存するクッキー名,[保存する値,有効期限,パス,ドメイン,セキュリティ]);


引数がいろいろありますが、特にパスやドメインやセキュリティを必要としないなら
有効期限までを記述すればいいと思います。
<?php
setcookie ("masago", "まさご",time()+14*24*3600); /* 2週間で期限切れ */
?>


という風に指定します。

注意しなければいけないことがあります。
setcookie関数はHTTPヘッダー内で送信されるので
ボディ(HTMLの内容)を送信する前に記述する必要があります。

これだけは気をつけないとせっかくsetcookie分を記述しても
Cookieに内容が保存されません。


さてCookieに書き込んだ内容を読み取るにはどうしたらいいでしょうか?
Cookieに書き込んだ内容はグローバル変数($_COOKIE,$HTTP_COOKIE_VARS)にも格納されます。
<?php
echo $_COOKIE["masago"];
echo $HTTP_COOKIE_VARS["masago"];
?>


を実行するとこちらでも


setcookie関数でCookieに格納した値を確認できます。


Cookieで一番使うのは掲示板なんかのユーザ情報だと思います。
これはお名前、メールアドレス、URLなど一人のユーザさんが複数の項目を有しているので
Cookieに複数項目を保存したくなります。
クエリ形式で保存したり、連想配列にしたりとできますが、
私はこんな風にやってます。
<?php
$name="まさご";
$mail="masago@kagoya.net";
$url="http://masago.kir.jp";
$cookvalue = implode(",", array($name,$mail,$url));
setcookie ("hanare", $cookvalue,time()+14*24*3600);
?>


こうするとそれぞれの項目がimplode関数でカンマ(,)区切りでくっつきます。
$cookivalueには「まさご,masago@kagoya.net,http://masago.kir.jp」入ります。
これを取り出すときは
<?php
list($name,$mail,$url) = explode(",", $HTTP_COOKIE_VARS["hanare"]);
?>


とすると、explode関数で内容が分解されそれぞれ$name,$mail,$urlに格納されます。
これらをechoで表示してみると

$name=まさご
$mail=masago@kagoya.net
$url=http://masago.kir.jp

と内容が分解されて保存されているのが分かります。(^_^)

ところで、作ったクッキーを削除する方法は?
<?php
setcookie ("hanare");
?>
のようにクッキー名だけを指定して実行するとこのクッキーは削除されます。

Cookieが使えるとサイトに来てくれた方が自分の名前などを毎回入力しなくてすむので便利です。
利用してみてくださいね。



サンプル: こう書くと   ==>    こうなる!

Cookieへの保存です。


(オマケ)
クエリ形式を使った複数内容保存:
<?php
$name="まさご";
$mail="masago@kagoya.net";
$url="http://masago.kir.jp";
setcookie ("omake", "name=$name&mail=$mail&url=$url",time()+14*24*3600);
?>
こんな風にクエリ形式にして保存します。
取り出すときはparse_str関数を使ってクエリ形式の文字を名前と値に分解します。
<?php
$omake=$_COOKIE["omake"]; parse_str($omake);
echo $name;
echo $mail;
echo $url;
?>
とやると 通知
説  明:Undefined index: omake
ファイル:php20030727.php
場  所:241行目
と表示されます。











  HOME