クッキー
■概要
クッキーとはWebサイトを訪問したユーザーのブラウザに値を保存させておく機能です。
サンプル
サイトに訪問した回数をカウントするサンプルのリンクです。 サンプル
特性
クッキーの特性は以下のようなものがあります。
ユーザーのブラウザにデータを保存する
クッキーのデータはサーバーではなくユーザーのブラウザに保存されます。 ショッピングサイトで購入したい商品にチェックを入れたらチェックした内容を 覚えていたりしますが、あれはクッキーを使用してチェックした商品を保存しています。
セキュリティ性は低い
ユーザーのブラウザに保存するのでセキュリティは高くありません。 なので、会員登録で設定したユーザーIDやパスワードなどは クッキーではなくセッションに保存されます。
ブラウザが変わると無効
クッキーはあくまでブラウザに保存されるので、 ショッピングサイトのチェックをChromeでチェックした場合は クッキーはChromeに保存されます。 IEやFireFoxなどの別のブラウザで起動しても チェックした内容はなかったことになります。
保存サイズ制限有り
1つのクッキーで保存できる最大サイズは4Kバイトです。 それ以上のサイズのデータを保存するにはセッションを利用します。
クッキーの流れ
以下はクッキー機能の流れです。
①.Webブラウザからサイトへクッキーを送信する
Webブラウザはアクセスするサイト(サーバー)に対して 関連付けられているクッキー情報があればその情報を添付します。
②.ブラウザから送信されたクッキー情報の確認をする
アクセスがあったサーバーは送信情報の中にクッキー情報があるかを確認します。 この時にクッキー情報の有無でこのあとのブラウザへの送信情報が変わります。
③.クッキー情報がある場合
クッキー情報があれば、その情報を元にしてサイトの表示を変更します。 例えばショッピングサイトのカートに商品情報なら サイトが表示された際にカート情報を反映した状態で表示します。
④.クッキー情報がない場合
クッキーがない場合は保存の必要があるかを判断して クッキー作成依頼をWebブラウザに送信します。
実装
ブラウザに関連付けられたクッキーは自動で送信されるので、 実装で必要な処理はクッキーの設定と削除です。 この二つの処理はどちらもsetcookieで行います。
設定
設定に必須なのはクッキーを第一引数に指定するクッキーの名前のみで 保存する値や有効期限、有効範囲などの設定の有無はユーザーが 決めれるようになっています。
関数内容 | 指定された名前のクッキーを作成する クッキーの値や保存期限などオプション引数が多数ある 設定が成功したらtrue、失敗したらfalseを返す ※オプション引き数は一部のみ別項目で紹介しています |
---|
戻り値 | 設定の成否(成功がtrue) |
---|
引数の型 | 説明 |
---|---|
string | クッキー名 |
値型 or string | クッキーの値(オプション) |
値型 | 有効期限(オプション) 現在の時刻から何秒後、何秒前で指定する |
保存する値の設定
クッキーに値を保存したい場合は第二引数に値を指定します。setcookie("shopping_item_id", 1);
有効期限設定
クッキーに有効期限の設定をしたい場合は第三引数に値を指定します。 有効期限が切れると自動的にクッキーは削除されます。setcookie("shopping_item_id", 1, time() * 60 * 60);
時間は1秒間隔で指定するので上の例では「60秒 * 60秒 = 3600秒」 つまり、現在の時間から1時間後までを有効期限として設定しています。 ※0を設定した場合はブラウザを閉じた際にクッキーを削除します。削除
クッキーの削除は値に""を設定するか、有効期限を今の時間よりも前に 設定することで削除できます。""による削除
setcookie("shopping_item_id", "");
時間による削除
setcookie("shopping_item_id", "", time() - 3600);
クッキーの使用
クッキーの情報は$_COOKIEに保存されています。 この$_COOKIEは$_GETや$_POSTと同じPHPが用意した特殊なグローバル変数です。 値が存在するかの確認はisset関数を使用します。 issetは値が設定されていてかつNULLでない場合にtrueを、 そうでない場合にfalseを返す関数です。例
if (isset($_COOKIE["shopping_item_id"])) { echo "shopping_item_id = " . $_COOKIE["shopping_item_id"]; } else { setcookie("shopping_item_id", "1"); }