ウェピックスではウェブ界の情報をピックアップします!
menu
ホーム > PHPの文法 > 13 クッキー > 13-1 クッキー(Cookie)

13-1 クッキー(Cookie)

Pocket

  • クッキー(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)とは
POINT

  • クッキー(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
POINT

  • クッキー(Cookie)の送信と削除には、setcookie()関数を使用する
  • setcookie() はすべての出力の前に設定する
    ヘッダー(header)情報、<DOCTYPE>タグ、<html>タグ、空白、echo、print などより前
  • setcookie() では、name,value,expire,path,domain,secure,httponlyを指定する
    ※name以外省略可能
  • setcookie() が成功するとTRUEを返し、失敗するとFALSEを返す
  • クッキー(Cookie)の受信には、
    スーパーグローバル変数 $_COOKIE を使用する
  • ブラウザに保存されているクッキー(Cookie)は$_COOKIEへ自動的に格納される

クッキー(Cookie)の送信や削除を行うには、「setcookie()」関数を使用します。また、この関数はブラウザへのあらゆる出力の前にコールする必要があるます。ヘッダー(header)情報、<DOCTYPE>タグ、<html>タグ、空白、echo、print などより前にコールして下さい。

クッキー(Cookie)を受信するにはスーパーグローバル変数 $_COOKIE を使用します。ブラウザに保存されているクッキー(Cookie)は$_COOKIEへ自動的に格納されます。$_COOKIEは連想配列として使用します。$_COOKIE['クッキー名']という形でデータを出力します。

setcookie()関数

論理値 = setcookie(name [, value [, expire [, path [, domain [, secure [, httponly]]]]]]);
//[]はオプション
name
(string)
クッキーの名前を指定します。名前は一意です。空白やセミコロンは使用できません。この名前は$_COOKIEで値を出力する際のキー名として使用します。名前が「tryphpCookie」だった場合は、$_COOKIE['tryphpCookie']で取得します。
value
(string)
保存するクッキーの値を指定します。クライアント(ウェブブラウザ)に保存されるクッキーのデータです。保存可能なのは文字列データのみです。容量制限はありませんが、4KB以下が目安です。この値はPHPのスパーグローバル変数 $_COOKIE で取得できます。
expire
(int)
クッキーの有効期限をUnixタイムスタンプで指定します。「time()+60*60*24*30」とした場合、30日後まで有効となります。「time()-1800」マイナスを指定するとクッキーデータが削除されます。有効期限を指定しない場合は、ブラウザを閉じた時点でクッキーが削除されます。
path
(string)
サーバー上のクッキーを有効とするパスを指定します。「/」とした場合、ドメイン以下すべてでクッキーが有効になります。「/dir/」とした場合、 dir ディレクトリ以下すべてで有効になります。
domain
(string)
クッキーを有効とするドメイン(domain)を指定します。このドメイン配下のときのみクライアントへクッキーが送信されます。
secure
(bool)
SSLの有無の設定。「TRUE」にするとクライアントからHTTPS接続されたときのみクライアントへクッキーが送信されるようになります。デフォルトでは「FALSE」です。
httponly
(bool)
HTTPからのみ接続を有効とする指定です。「TRUE」にするとHTTPを通してのみクライアントのクッキーにアクセスできるようになります。javascriptからはアクセスできません。

クッキー送信の例
※このコードはあらゆる出力の前に記述してください。ヘッダー(header)情報、<DOCTYPE>タグ、<html>タグ、空白、echo、print などより前です。

<?php
setcookie('tryphpCookie1','「name:tryphpCookie1」のクッキーとして保存する文字列データです。');

setcookie('tryphpCookie2','「name:tryphpCookie2」のクッキーとして保存する文字列データです。', time()+3600);//有効期限は1時間

setcookie('tryphpCookie3','「name:tryphpCookie3」のクッキーとして保存する文字列データです。', time()+(60*60*24)*7, '/code-example/php/', 'wepicks.net', FALSE, TRUE);
?>

クッキー取得の例
※スーパーグローバル変数 $_COOKIE で取得します。連想配列のキー名はクッキー名を使用します。

<?php
echo '$_COOKIE&#91;\'tryphpCookie1\'&#93;の出力:'.$_COOKIE&#91;'tryphpCookie1'&#93;."<br/>\n";
echo '$_COOKIE[\'tryphpCookie2\']の出力:'.$_COOKIE['tryphpCookie2']."<br/>\n";
echo '$_COOKIE[\'tryphpCookie3\']の出力:'.$_COOKIE['tryphpCookie3']."<br/>\n";
?>

結果は


$_COOKIE['tryphpCookie1']の出力:「name:tryphpCookie1」のクッキーとして保存する文字列データです。
$_COOKIE['tryphpCookie2']の出力:「name:tryphpCookie2」のクッキーとして保存する文字列データです。
$_COOKIE['tryphpCookie3']の出力:「name:tryphpCookie3」のクッキーとして保存する文字列データです。

となります。

クッキー(Cookie)の制約
POINT

  • クッキー(Cookie)による保存データはテキストデータのみ
  • クッキー(Cookie)をブラウザへ送信する際は、
    あらゆる出力の前に行う

クッキー(Cookie)により保存することができるのはテキストデータのみです。バイナリデータ(画像などを扱うデータ形式)は保存できません。

また、クッキー(Cookie)はHTTPヘッダーの一部なので、<DOCTYPE~>や<html>を記述する前、echoやprintで出力する前、に送信する必要があります。、つまり、ブラウザに何らかの出力を行う前、空白も含めあらゆる出力よりも前にコールしなければなりません。 この制約は、header()関数 に課されているものと同じです。

サンプルコード

– サンプル Click Here ! –

<?
//クッキー変数作成
//クッキーの名前
$iCkeName     =    'tryphpCookieName';
//クッキーの値
$sCkeValue     =   date('Y-m-d H:i:s').'にtryphpで作成したcookieの値です。';
//有効期限は7日間
$iCkeTimeOut  =    time()+(60*60*24)*7;
//クッキーが有効なサイト上のパス
$sPath =           '/';
//クッキーが有効なドメイン
$sDomain =         'wepicks.net';
//クッキーセット
setcookie($iCkeName, $sCkeValue, $iCkeTimeOut, $sPath, $sDomain);
?>

<?php $sTitle = 'クッキーの作成とクッキー変数呼び出し「setcookie()」'; ?>
<?php $sPageUrl = 'http://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>TRYPHP! 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&#91;'tryphpCookieName'&#93;;
?>

<!-- =========================== ここまで =========================== // -->
</div>
<hr/>






</body>
</html>

– サンプル Click Here ! –

タグ(=記事関連ワード)

日付

投稿日:2011年10月20日
最終更新日:2013年10月27日

関連記事

配列関数サンプル

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://wepicks.net/phpref-setcookie/trackback/