PHP の クッキー(Cookie)
クッキー(Cookie) 簡単まとめ
1 Minute Note
- クッキー(Cookie)とは、ウェブサーバーとウェブブラウザの間で状態を管理する機構、または機構による保存データ自体のこと
- クッキー(Cookie)は、ユーザーとサーバー間の状態を管理する機能を提供する
- クッキー(Cookie)は、固有のユーザを識別できる
- クッキー(Cookie)の送信と削除には、setcookie()関数を使用する
- setcookie()関数はすべての出力の前に設定するヘッダー(header)情報、
タグ、タグ、空白、echo、print などより前にコールする - setcookie()関数では、name,value,expire,path,domain,secure,httponlyを指定する
※name以外省略可能 - setcookie()関数が成功するとTRUEを返し、失敗するとFALSEを返す
- クッキー(Cookie)の受信には、スーパーグローバル変数 $_COOKIE を使用する
- ブラウザに保存されているクッキー(Cookie)はPHPの$_COOKIEへ自動的に格納される
- クッキー(Cookie)による保存データはテキストデータのみ
- クッキー(Cookie)をブラウザへ送信する際は、あらゆる出力の前に行う
クッキー(Cookie)とは
- クッキー(Cookie)とは、ウェブサーバーとウェブブラウザの間で状態を管理する機構、または機構による保存データ自体のこと
- クッキー(Cookie)は、ユーザーとサーバー間の状態を管理する機能を提供する
- クッキー(Cookie)は、固有のユーザを識別できる
HTTPプロトコル(プロトコルは通信方法・通信規約のこと)はユーザーとサーバー間の状態を管理してくれる機能はなく、ステートレス(状態を保持しない)なプロトコルです。ウェブアプリケーションはユーザーとサーバー間の状態を管理してステートフル(状態を保持する)なサービスを提供する必要があります。HTTPとは、ウェブブラウザとウェブサーバの間でHTMLなどのコンテンツの送受信に用いられる通信プロトコルのことです。
オンラインショップでは多数の商品が取り揃えられており、ユーザーは、検索機能を利用したりバナーやナビゲーションメニューなどをクリックして目的の商品や興味のある商品を探します。探し当てた商品をその場で一々決済手続きしたり、商品ページのURLや商品名をメモなどして再度そのページへ戻ってきて商品を検討するなどということでは購入手続きが煩わしくなります。そこで、オンラインショップでは、ユーザー専用のショッピングカート機能を提供し、商品を一時的に保存できるようにします。一通り商品を閲覧した後で、選択した商品内容を再度確認したり、数量を変更したり、商品を削除したり、ショッピングカート内で精査することが出来ます。精査後、ショッピングカートに残っている商品の決済手続きや配送手続きなどを纏めて行うとができます。このようなショッピングカート機能を実現すには、ユーザーを特定し、ユーザーとサーバー間の状態を保持する機能が必要です。
そこで、クッキー(Cookie)が活躍します。
クッキー(Cookie)は、ユーザー(ウェブブラウザ)とウェブサーバー間の状態を管理する機能を提供します。HTTPプロトコルの拡張で、Set-Cookieレスポンスヘッダ と Cookieリクエストヘッダ という2つのHTTPヘッダから成り立ちます。クッキーは、サイトを訪れたユーザーのブラウザに文字列データを格納したり、再度サイトを訪問したユーザーを特定したりする機能を提供します。
クッキー(Cookie)は厳密にはHTTP cookie(エイチティーティーピークッキー、単にCookieとも表記される)といいます。
クッキー(Cookie)はHTTP通信によってウェブサーバとウェブブラウザの間で状態を管理する機構です。或いは、このシステムによってウェブサーバーとウェブブラウザとの通信で、ウェブブラウザに保存された情報それ自体のことを示します。つまり、ウェブサーバーとウェブブラウザ間での情報の通信・管理・保存データ等のことをクッキー(Cookie)といいます。
サーバーとユーザー間での情報の通信と保存が可能なので、固有のユーザを識別することができます。固有のユーザーを識別できるということは、例えば、ホームページへの訪問階数をユーザー毎に表示させたり、ユーザーのログイン状態を維持させたり、ショッピングカート機能を実装したりすることが可能になるということです。
クッキー(Cookie)の送信・削除・受信 クッキー関数の setcookie() と $_COOKIE
- クッキー(Cookie)の送信と削除には、setcookie()関数を使用する
- setcookie()関数はすべての出力の前に設定するヘッダー(header)情報、
タグ、タグ、空白、echo、print などより前にコールする - setcookie()関数では、name,value,expire,path,domain,secure,httponlyを指定する
※name以外省略可能 - setcookie()関数が成功するとTRUEを返し、失敗するとFALSEを返す
- クッキー(Cookie)の受信には、スーパーグローバル変数 $_COOKIE を使用する
- ブラウザに保存されているクッキー(Cookie)はPHPの$_COOKIEへ自動的に格納される
クッキー(Cookie)の送信や削除を行うには、「setcookie()」関数を使用します。また、この関数はブラウザへのあらゆる出力の前にコールする必要があるます。ヘッダー(header)情報、<DOCTYPE>タグ、<html>タグ、空白、echo、print などより前にコールして下さい。
クッキー(Cookie)を受信するにはスーパーグローバル変数 $_COOKIE を使用します。ブラウザに保存されているクッキー(Cookie)は$_COOKIEへ自動的に格納されます。$_COOKIEは連想配列として使用します。$_COOKIE['クッキー名']という形でデータを出力します。
name 名前(文字列)
[
, value 値(文字列)
, expire 有効期限(整数)
, path サーバー上のパス(文字列)
, domain ドメイン(文字列)
, secure セキュアな接続の有無(TRUE or FALSE)
, httponly HTTPプロトコルでの接続(TRUE)
]
);
//[ ]省略可能
設定する項目 | 内容 |
---|---|
name 名前 (文字列) | クッキーの名前を指定します。名前は一意です。空白やセミコロンは使用できません。この名前は$_COOKIEで値を出力する際のキー名として使用します。名前が「wepicksCookie」だった場合は、$_COOKIE['wepicksCookie']で取得します。 |
value 値 (文字列) | 保存するクッキーの値を指定します。クライアント(ウェブブラウザ)に保存されるクッキーのデータです。保存可能なのは文字列データのみです。容量制限はありませんが、4KB以下が目安です。この値はPHPのスパーグローバル変数 $_COOKIE で取得できます。 |
expire 有効期限 (整数) | クッキーの有効期限をUnixタイムスタンプで指定します。「time()+60*60*24*30」とした場合、30日後まで有効となります。「time()-1800」マイナスを指定するとクッキーデータが削除されます。有効期限を指定しない場合は、ブラウザを閉じた時点でクッキーが削除されます。 |
path サーバー上のパス (文字列) | サーバー上のクッキーを有効とするパスを指定します。「/」とした場合、ドメイン以下すべてでクッキーが有効になります。「/dir/」とした場合、 dir ディレクトリ以下すべてで有効になります。 |
domain ドメイン (文字列) | クッキーを有効とするドメイン(domain)を指定します。このドメイン配下のときのみクライアントへクッキーが送信されます。 |
secure セキュアな接続の有無 (論理値) | SSLの有無の設定。「TRUE」にするとクライアントからHTTPS接続されたときのみクライアントへクッキーが送信されるようになります。デフォルトでは「FALSE」です。 |
httponly httpプロトコルでの接続 (論理値) | HTTPからのみ接続を有効とする指定です。「TRUE」にするとHTTPを通してのみクライアントのクッキーにアクセスできるようになります。javascriptからはアクセスできません。 |
クッキー送信の例
※このコードはあらゆる出力の前に記述してください。ヘッダー(header)情報、<DOCTYPE>タグ、<html>タグ、空白、echo、print などより前です。
1 2 3 4 5 | <?php setcookie('wepicksCookie1','「name:wepicksCookie1」のクッキーとして保存する文字列データです。'); setcookie('wepicksCookie2','「name:wepicksCookie2」のクッキーとして保存する文字列データです。', time()+3600);//有効期限は1時間 setcookie('wepicksCookie3','「name:wepicksCookie3」のクッキーとして保存する文字列データです。', time()+(60*60*24)*7, '/code-example/php/', 'wepicks.net', FALSE, TRUE); ?> |
クッキー取得の例
※スーパーグローバル変数 $_COOKIE で取得します。連想配列のキー名はクッキー名を使用します。
1 2 3 4 5 | <?php echo '$_COOKIE[\'wepicksCookie1\']の出力:'.$_COOKIE['wepicksCookie1']."<br>\n"; echo '$_COOKIE[\'wepicksCookie2\']の出力:'.$_COOKIE['wepicksCookie2']."<br>\n"; echo '$_COOKIE[\'wepicksCookie3\']の出力:'.$_COOKIE['wepicksCookie3']."<br>\n"; ?> |
結果は
$_COOKIE['wepicksCookie1']の出力:「name:wepicksCookie1」のクッキーとして保存する文字列データです。
$_COOKIE['wepicksCookie2']の出力:「name:wepicksCookie2」のクッキーとして保存する文字列データです。
$_COOKIE['wepicksCookie3']の出力:「name:wepicksCookie3」のクッキーとして保存する文字列データです。
となります。
クッキー(Cookie)の制約
- クッキー(Cookie)による保存データはテキストデータのみ
- クッキー(Cookie)をブラウザへ送信する際は、あらゆる出力の前に行う
クッキー(Cookie)により保存することができるのはテキストデータのみです。バイナリデータ(画像などを扱うデータ形式)は保存できません。
また、クッキー(Cookie)はHTTPヘッダーの一部なので、<DOCTYPE~>や<html>を記述する前、echoやprintで出力する前、に送信する必要があります。、つまり、ブラウザに何らかの出力を行う前、空白も含めあらゆる出力よりも前にコールしなければなりません。 この制約は、header()関数 に課されているものと同じです。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <? //クッキー変数作成 //クッキーの名前 $iCkeName = 'wepicksCookieName'; //クッキーの値 $sCkeValue = date('Y-m-d H:i:s').'にwepicksで作成したcookieの値です。'; //有効期限は7日間 $iCkeTimeOut = time()+(60*60*24)*7; //クッキーが有効なサイト上のパス $sPath = '/'; //クッキーが有効なドメイン $sDomain = 'wepicks.net'; //クッキーセット setcookie($iCkeName, $sCkeValue, $iCkeTimeOut, $sPath, $sDomain); ?> <?php $sTitle = 'クッキーの作成とクッキー変数呼び出し「setcookie()」'; ?> <?php $sPageUrl = 'https://wepicks.net/2012/03/02/phpsample-cookie-create/'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <meta name="robots" content="index"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <head> <title>wepicks! PHPサンプル <?php echo $sTitle; ?></title> </head> <body> <h1>PHPサンプル <?php echo $sTitle; ?></h1> <!-- 説明ページ --> <h3><a href="<?php echo $sPageUrl; ?>">→説明はこちら</a></h3> <hr/> <a name="4"></a> <h2>サンプルコード実行</h2> <div style="background-color:#f8f8f8;margin:20px; padding:20px; border:solid #cccccc 1px;"> <!-- // =========================== ここから =========================== --> <h3>クッキー変数呼び出し</h3> <?php //クッキー変数呼び出し echo $_COOKIE['wepicksCookieName']; ?> <!-- =========================== ここまで =========================== // --> </div> <hr/> </body> </html> |
タグ(=記事関連ワード)
日付
最終更新日: