サーチ…
前書き
HTTP Cookieは、ユーザーがブラウズしている間に、Webサイトから送信され、ユーザーのWebブラウザーによってユーザーのコンピューターに保存される小さなデータです。
構文
bool setcookie( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )
パラメーター
パラメータ | 詳細 |
---|---|
名 | クッキーの名前。これは$_COOKIE スーパーグローバルから値を取得するために使用できるキーです。 唯一の必須パラメータです |
値 | Cookieに格納する値。このデータにはブラウザからアクセスできるので、ここでは何も保存しないでください。 |
失効する | クッキーが期限切れになる時期を表すUnixタイムスタンプ。ゼロに設定すると、セッションの終了時にクッキーが期限切れになります。現在のUnixタイムスタンプよりも小さい数値に設定すると、クッキーは直ちに失効します。 |
パス | クッキーの範囲。 / 設定すると、クッキーはドメイン全体で利用可能になります。 /some-path/ 設定すると、そのパスとそのパスの子孫でのみCookieが使用可能になります。デフォルトは、クッキーが設定されているファイルの現在のパスです。 |
ドメイン | Cookieが使用可能なドメインまたはサブドメイン。裸のドメインstackoverflow.com 設定すると、そのドメインとすべてのサブドメインでCookieが使用可能になります。サブドメインmeta.stackoverflow.com 設定すると、そのサブドメインとすべてのサブサブドメインでのみCookieが使用可能になります。 |
安全な | TRUE 設定すると、クッキーは、クライアントとサーバーの間にセキュアなHTTPS接続が存在する場合にのみ設定されます。 |
httponly | CookieをHTTP / Sプロトコルでのみ使用できるようにし、JavaScriptなどのクライアント側のスクリプト言語では使用できないように指定します。 PHP 5.2以降でのみ利用可能です。 |
備考
setcookie
関数を呼び出すだけでは、与えられたデータを$_COOKIE
スーパーグローバル配列に入れるだけではないことに注意してsetcookie
。
たとえば、次のようなことはありません。
setcookie("user", "Tom", time() + 86400, "/");
var_dump(isset($_COOKIE['user'])); // yields false or the previously set value
値はまだありません。次のページが読み込まれるまではありません。関数setcookie
は次のhttp接続でこのクッキーを設定するようにクライアント(ブラウザ)に指示します 。次に、ヘッダーがブラウザーに送信されると、ヘッダーにはこのCookieヘッダーが含まれます。ブラウザはクッキーがまだ期限切れでないかどうかチェックし、そうでなければhttpリクエストでクッキーをサーバに送信します。これはPHPがそれを受け取り、その内容を$_COOKIE
配列に入れます。
Cookieを設定する
クッキーは、 setcookie()
関数を使用して設定されます。クッキーはHTTPヘッダーの一部なので、出力をブラウザに送信する前にクッキーを設定する必要があります。
例:
setcookie("user", "Tom", time() + 86400, "/"); // check syntax for function params
説明:
- 名前が
user
Cookieを作成しuser
- (オプション)クッキーの値は
Tom
- (オプション)Cookieの有効期限は1日(86400秒)
- (オプション)Cookieはウェブサイト全体で利用できます
/
- (オプション)CookieはHTTPS経由でのみ送信されます
- (オプション)JavaScriptなどのスクリプト言語ではCookieにアクセスできません
スーパーグローバル
$_COOKIE
に新しいデータがすぐに$_COOKIE
ないため、作成または変更されたクッキーは後続のリクエスト(path
とdomain
一致する場合)でのみアクセスできます。
Cookieの取得
クッキー指定user
取得と出力
クッキーの値は、グローバル変数$_COOKIE
を使用して取得できます。たとえば、 user
という名前のCookieがある場合、このように取得できます
echo $_COOKIE['user'];
Cookieの変更
クッキーの値は、クッキーをリセットすることによって変更することができます
setcookie("user", "John", time() + 86400, "/"); // assuming there is a "user" cookie already
クッキーはHTTPヘッダーの一部なので、出力がブラウザに送られる前に
setcookie()
呼び出さなければなりません。
クッキーを変更するときは、
setcookie()
のpath
とdomain
パラメータが既存のクッキーと一致するか、新しいクッキーが代わりに作成されることを確認してください。
クッキーの値部分は、クッキーを送信すると自動的にURLエンコードされ、受信されると自動的にデコードされ、クッキー名と同じ名前で変数に割り当てられます
Cookieが設定されているかどうかの確認
スーパーグローバル$_COOKIE
変数にisset()
関数を使用して、Cookieが設定されているかどうかを確認します。
例:
// PHP <7.0
if (isset($_COOKIE['user'])) {
// true, cookie is set
echo 'User is ' . $_COOKIE['user'];
else {
// false, cookie is not set
echo 'User is not logged in';
}
// PHP 7.0+
echo 'User is ' . $_COOKIE['user'] ?? 'User is not logged in';
Cookieの削除
クッキーを削除するには、有効期限のタイムスタンプを過去の時刻に設定します。これにより、ブラウザの削除メカニズムが起動されます。
setcookie('user', '', time() - 3600, '/');
クッキーを削除するときは、
setcookie()
のpath
とdomain
パラメータが、削除しようとしているクッキーと一致するか、すぐに期限切れになる新しいクッキーが作成されることを確認してください。
現在のページが$_COOKIE
値を使用する場合は、 $_COOKIE
値を設定解除することをお勧めします。
unset($_COOKIE['user']);