クッキー送受信
そふぃのPHP入門 >> PHP実践リファレンス >> クッキー処理 >> クッキー送受信

クッキー送受信

クッキー送受信

クッキーを送信するのにはsetcookie()関数を使うだけです。クッキー送信とクッキー削除はどちらもこの関数1つでできます。また、ブラウザから送信されてきているクッキーは$_COOKIE['クッキー名']という連想配列に自動的に格納されていますので、クッキーを扱いたい場合には実質setcookie()関数と$_COOKIEを覚えればいいだけです。

$_COOKIEに関してはPHPに予め用意されている変数(定義済み変数)の1つでスーパーグローバルです。スーパーグローバルですとか定義済み変数の細かい説明はサーバ変数でやった$_SERVER$_GETと$_POSTでやった$_GET$_POSTと同一ですのでここではしません。注意したい事は$_COOKIEはスーパーグローバル(スコープ無視)である事と、register_globals値によって$_COOKIE['クッキー名']ではなく"$クッキー名"としても扱える場合もある、という事だけです。他の定義済み定数と同様の注意点ですね。今言った事が分からない方はサーバ変数または$_GETと$_POSTの注意点とまるで同じですのでそちらをご覧になってきて下さい。

setcookie関数―クッキーを送信する

まずはクッキーの送信からです。クッキーを送信するにはsetcookie()関数を使用します。setcookie()は見たまんまの意味で、クッキーを送信する関数です。

参考関数

書式

  • bool setcookie( string name [, string value [, int expire [, string path [, string domain [, bool secure ]]]]] )

随分長い書式ですが、第6引数まであります。必ずしも全てを使用するわけではないですが、第3引数の「有効期限」まではかなり使用頻度が高いです。

setcookie()の基本的な使用方法は以下の通りです。

  1. setcookie('クッキー名', 'クッキー値');

第1引数にセットしたいクッキーの名前、第2引数にセットしたいクッキーの値を指定するのが基本的な使用方法です。この他にも有効期限や有効パス、有効ドメインなどの設定もできるのですが、それは後のページに譲りますので、まずは基本的な使用方法を覚えて下さい。

クッキー送信の実際のサンプルは以下のようになります。

  1. <?php
  2. setcookie('name', 'そふぃ'); // 有効期限なしのクッキー
  3. ?>

上記のスクリプトを実行すると、"name"というクッキー名に"そふぃ"という値がセットされます。有効期限の設定などをしていないので、その場限り、つまり、「ブラウザを閉じたら自動で破棄される」という短命のクッキーがセットされます。クッキー値は、フォームと一緒で自動的にURLエンコード・デコードが行われるので、日本語を扱う場合でもURLエンコードをする必要はありません。

クッキー送信のスクリプトは、全ての出力の前に記述されている必要がありますので注意して下さい。

このクッキー値を表示したい場合は

  1. <?php
  2. print $_COOKIE['name'];
  3. ?>

とするだけです。非常に簡単ですね。

訪問回数カウンター

良くある「あなたは何回目の訪問者です」というカウンタースクリプトですが、大抵はクッキーを使って実現されています。何回目の訪問かをカウントしてクッキーに保存しておき、表示する時にはクッキーから取り出して変数に格納しておいたカウント値を出力します。

クッキーを送信しているため、送信部分は<DOCTYPE~~><html>などの記述の前に書かなくてはなりませんので、今回はサンプルが送信部分のPHPと出力部分のHTMLとに分けてあります。今回の出力結果をご覧になりたい方はクッキーを有効にして下さいね。

訪問回数カウンター:サンプルスクリプト

  1. <?php
  2. // 訪問回数カウント用の変数$visitにカウント値を格納
  3. if( isset($_COOKIE['visitcount']) ){ // クッキーがあればその値がカウント値
  4.   $visit = $_COOKIE['visitcount'];
  5. } else{ // クッキーがなければ初回訪問としてカウント値は0
  6.   $visit = 0;
  7. }
  8.  
  9. $visit++; // カウント値+1
  10. setcookie('visitcount', $visit); // 有効期限なしのクッキーを設定
  11. ?>

このスクリプトではまず、isset()という関数を使ってvisitcountというクッキー名のクッキーが定義されているかどうかを調べています。isset()関数は引数に指定した変数が定義されているかどうかを調べる関数です。

参考関数

  • isset() ---- 変数がセットされているどうか調べる

書式

  • bool isset( mixed var )

クッキー値が定義されていればそのクッキー値を訪問回数カウント値に設定します。ここではvisitcountのクッキーが有効とみなされるのは2回目の訪問時からとなり、リロードボタンを押すなどして再訪問した時などクッキーに保存されている値がカウント値とされます。

クッキーがなければ初回訪問という事なのでカウント値は0とします。

カウントアップ処理をした後に現在のカウント値をクッキーに送信します。

これで訪問回数をカウントする為のクッキーの設定が終わりましたので、後はHTML内の表示させたい部分に出力するだけです。出力の1例です。

<html>
<head>
<title>訪問回数カウンター―そふぃのPHP入門</title>
</head>
<body>
<p><?= $visit."回目の訪問です。"; ?></p>
</body>
</html>

出力結果

1回目の訪問です。

今回は有効期限を設定していないので、ブラウザを落とすとクッキーは破棄されます。つまり、ブラウザを落とせば訪問回数は0からカウントし直されるようになるので面倒でしょうが試してみて下さい。