XAMPP入門

2.PHP

(6)HTTPクッキー(cookie)

HTTPクッキーとはブラウザに一時的に文字列データを保存する機能です。
前回の訪問日時を記憶したり、ショッピングサイトのカートとして利用されます。
PHPではクッキーにデータを保存したり、読み出したりができ、データを保存する期間を指定できます。
ただし、期間を指定しないとブラウザを閉じたときクッキーのデータは消滅します。
参考:クッキーについて

クッキーの保存
setcookie("変数名" , "データ" , 有効時間(秒単位));
クッキーの取得
$_COOKIE['変数名']

【例】
samp08.php
<?php
setcookie("data1","111");
setcookie("data2","222",time()+3600);
?>
<html>
<head>
</head>
<body>
<?php
echo $_COOKIE['data1'];
echo "<br>";
echo $_COOKIE['data2'];
?>
</body>
</html>

※setcookieは<html>の前に行います。
一回めはクッキーが読み込まれないためにエラーが表示されますが、再読み込みを行うとデータが表示されます。
一度ブラウザを閉じて実行すると、「data1」のみエラーとなり、「data2」は表示されます。


samp09.php
<?php
setcookie("data1","111");
setcookie("data2","222",time()+3600);
?>
<html>
<head>
</head>
<body>
<?php
if(isset($_COOKIE['data1']))echo $_COOKIE['data1'];
echo "<br>";
if(isset($_COOKIE['data2']))echo $_COOKIE['data2'];
?>
</body>
</html>

初めてサイトを訪れた人にはクッキー情報は入っていないので、必ずエラーになります。
そこで、クッキー情報を取得するときは、次のようにします。

if(isset($_COOKIE['変数名'])) { クッキーが存在しているときに処理 }
else { クッキーが存在しないときの処理 }
※isset()・・・変数の中身が入っているときTRUEを返す

クッキー情報の処理順
1.クッキーの取得
2.クッキーの保存
3・<html>の読み込み


クッキーを配列で扱う

複数のクッキー情報を取り扱いたいときは、配列を利用します。

samp10.php
<?php
setcookie("info[id]","nkc");
setcookie("info[pass]","gamecg");
setcookie("info[name]","Kougakuin");
?>
<html>
<head>
</head>
<body>
<?php
if(isset($_COOKIE['info'])){
  foreach($_COOKIE['info'] as $key => $val){
    echo "$key : $val<br>";
  }
}
?>
</body>
</html>

クッキーの有効範囲

クッキーは同じフォルダもしくは、子フォルダ内のみ有効です。
他のドメインや同じドメインであっても親フォルダから読み取ることはできません。

samp10a.php


/sub/samp10b.php


この例だと samp10a.php は親フォルダにあって、 /sub/samp10b.php は子フォルダにあります。

samp10a.phpで保存されたクッキーデータは/sub/samp10b.phpで取得できますが、
/sub/samp10b.phpで保存されたクッキーデータはsamp10a.phpでは読み取れません。

親のクッキー → 子 OK
子のクッキー → 親 NG

Copyright (C) NKC All Rights Reserved.