English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP基本チュートリアル

PHP高度なチュートリアル

PHP & MySQL

PHPリファレンスマニュアル

PHP クッキー

このチュートリアルでは、PHPのcookieを使用してユーザーのブラウザ内に少量の情報を保存する方法を学びます。

cookieとは何ですか

cookieはユーザーのコンピュータ上に少量のデータを保存するための小さなテキストファイルです(最大4KB程度です)。これらは、ユーザー名などの情報を追跡するために通常使用され、ユーザーが次にウェブサイトにアクセスしたときに、特定のパーソナライズされたページを表示するために情報を検索するために使用されます。

ヒント:ブラウザがサーバーにページをリクエストするたびに、cookie内のすべてのデータが自動的にリクエスト内のサーバーに送信されます。

Cookieの設定

setcookie()関数はPHPでcookieを設定するために使用されます。setcookie()関数を呼び出さないと、スクリプトが生成する出力の前にcookieが設定されません。この関数の基本的な文法は以下のように示されます:

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

setcookie()関数のパラメータは以下のように意味されています:

パラメータ説明
namecookieの名前です。
valuecookieの値です。この値はユーザーのコンピュータ上に保存されるため、機密情報を保存しないでください。
expiresUNIX時間スタンプ形式の有効期限日です。この日以降、cookieはアクセスできなくなります。デフォルト値は0です。
pathサーバー上でcookieが利用可能なパスを指定します。設定が/の場合、cookieはドメイン全体で利用可能です。
domaincookieに使用できるドメインを指定します。例えば:ja.oldtoolbag.com。
secureこのフィールド(存在する場合)は、安全なHTTPS接続が存在する場合のみcookieを送信することを意味します。

ヒント:cookieの有効期限が0に設定されているか省略されている場合、cookieはセッションが終了したとき、つまりブラウザが閉じられる時に有効期限が切れます。

以下は、userNameという名前のcookieを作成し、その値をJohn Carterに設定するsetcookie()関数を使用する例です。また、cookieの有効期限を指定しています。30日(30 days * 24 hours * 60 min * 60 sec)。       

<?php
//Cookieを設定
setcookie("username", "John Carter", time())+30*24*60*60);
?>

注意:名前以外のすべてのパラメータはオプションです。空文字列("")でパラメータを置き換えてパラメータをスキップすることもできますが、expireパラメータをスキップする場合はゼロ(0)を使用してください。

警告:感覚的なデータをcookieに保存しないでください。悪意のあるユーザーが感覚的なデータを操作する可能性があります。安全に感覚的なデータを保存するために、以下を使用してください:セッション

Cookie値にアクセス

PHPの超全機能変数$_COOKIEは、cookieの値を検索するために使用されます。これは通常、ブラウザが現在のリクエストで送信したすべてのcookieの値のリストを含む連想配列であり、cookieの名前がキーです。標準の配列記法を使用して単一のcookie値にアクセスできます。例えば、先ほどの例で設定されたユーザー名cookieを表示するには、以下のコードを使用できます。

<?php
//単一のCookie値にアクセス
echo $_COOKIE["username"];
?>

上記のPHPコードは以下のような出力を生成します。

John Carter

cookieの値にアクセスする前に、cookieが設定されているかどうかを確認するのが良いです。これを行うために、PHPのisset()関数を使用できます。以下のように:

<?php
//cookieが設定されているか確認
if(isset($_COOKIE["username"])){
    echo "Hi " . $_COOKIE["username"];
} else {
    echo "Welcome Guest!";
}
?>

print_r($_COOKIE);のようなprint_r()関数を使用して、$_COOKIE連想配列の構造を確認できます。他の配列と同じように処理できます。

Cookieを削除

cookieの名前とどんな値(例えば空文字列)でも同じsetcookie()関数を呼び出してcookieを削除できますが、以下の例のように現在の過去の有効期限に設定する必要があります:

<?php
//cookieを削除
setcookie("username", "", time())-3600);
?>

ヒント:初めてCookieを作成したときに使用したパス、ドメイン、その他のパラメータと完全に同じ名前を渡す必要があります。これにより、正しいCookieが削除されることを確実にします。