PHP入門 リクエスト情報 クッキー情報($_COOKIE)
クッキー(Cookie)とは、クライアント側に保存可能な小さなテキストのことです。通常、Webの世界ではサーバーがクライアント上のファイルを読み書きすることを許可していません。しかし、クッキーだけは唯一例外で、サーバーがクライアントに対して、任意のテキストを保存できます。クッキーを利用することで、クライアント単位で保持したい情報の管理が用意になります。
クッキーの基本的な読み書き
1度目のアクセスで入力したメールアドレスをクッキーに保存し、2度目以降のアクセスで初期表示させます。
sample1.php
<?php require_once './Encode.php';?>
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<title>PHPサンプル</title>
</head>
<body>
<form method="POST" action="sample2.php">
<label for="email">メールアドレス</label>
<input id="email" type="text" name="email" size="40" value="<?=e($_COOKIE['email'] ?? '') ?>" />
<input type="submit" value="送信" />
</form>
</body>
</html>
sample2.php
<?php setCookie('email', $_POST['email'], time() + (60 * 60 * 24 * 90)); ?>
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<title>クッキー情報</title>
</head>
<body>
クッキーを保存しました。
</body>
</html>
構文:setcookie関数
setcookie(string $name [, string $value [, int $expires = 0
[, string $path [, string $domain [, bool $secure = false
[, bool $httponly = false]]]]]]) : bool
1、$name(クッキー名)、$value(値)、$expires(有効期限)
$name、$value、$expiresが、実質的に必要最小限の引数です。有効期限はタイムスタンプ値として表します。ここでは、「time()+(60*60*24*90)」としているので、現在の日時に対して「60秒×60分×24時間×90日」を加えたもの、つまり、90日後をクッキーの有効期限として設定しています。有効期限を省略した場合、クッキーはブラウザを閉じたタイミングで破棄されます。クッキーを即座に破棄したい場合は、「time()-3600」のように過去にタイムスタンプを設定します。
2、$domain(有効なドメイン)、$path(パス)
$domain、$pathは、クッキーの有効範囲を指定します。たとえば、$domainに「kc.msn.to」と指定した場合、「www.kc.msn.to」「www2.kc.msn.to」など、「kc.msn.to」のすべてのサブドメインでクッキーを有効にします。$pathについても同様です。「/tmp/」とした場合、「/tmp」とそのサブフォルダに対してクッキーが有効になります。既定では、それぞれ現在のドメインとカレントフォルダです。通常は$domainは既定のまま$pathは「/」サイト全体とするのが一般的です。
3、$secure(暗号化通信の要否)
引数$secureにtrue(既定値はfalse)を設定した場合、暗号化通信の環境のみクッキーを送信します。通信を暗号化している場合は、原則として$secureをtrueに設定しておきます。
4、$httponly(HTTPクッキーの有効化)
$httponlyは、HTTPクッキーを有効にするための設定です(既定値はfalse)。HTTPクッキーは、HTTP経由でのみアクセスできる(JavaScript経由ではアクセスできない)クッキーのことです。HTTPクッキーを設定することで、クロスサイトスクリプティング脆弱性によるクッキー盗聴のリスクを軽減できます。
クライアントに記録されたクッキーの取得方法
クッキーを取得する場合は、スーパーグローバル変数$_COOKIEの役割です。setcookie関数で指定したクッキー名を指定します。??演算子(null合体演算子)を介しているのは、$_COOKIE[‘email’]が空である場合の備えです。