セッションとクッキーって似てますね。
使い道も似たような感じなんですよ。
大きな違いはデータを保存する場所です。
クッキーはブラウザ上にデータを保持し、次の画面を開いたときなどに渡してサーバーで使います。
セッションはセッションIDをクッキーに保持し、サーバーに渡ってきたセッションIDを元にセッションデータを構築します。
GoogleやYahooの広告をクリックしたら同じような広告が何度も表示されるのはクッキーの仕業ですね。
今回はPHPを使ってこのクッキーにデータを追加したり、クッキーからデータを取得する方法について解説します。
PHPでクッキーを使う場合のスーパーグローバル変数
PHPでクッキーにアクセスする場合にはスーパーグローバル変数である $_COOKIE を使います。
$_COOKIE も $_SESSION 同様配列になっています。
配列になっていますが、値を追加するにはセッションのように配列に値を追加するようにはできません。
値を追加する方法や、追加した値を取得する方法は次に説明します。
PHPでクッキーにデータを追加する方法
クッキーは配列になっていますが、
$_COOKIE['name'] = "田中";
のように書いてもクッキーに保存することは出来ません。
一時的に $_COOKIE 内には追加出来ますが、クッキーに保存はされません。
クッキーに値をセットするのは次のように書きます。
setcookie($key, $value);
第三引数にタイムアウトを指定することも出来ます。
タイムアウトは現在の時刻+タイムアウトする秒で指定します。
例えば1日の場合は
setcookie($key, $value, time() + 24 * 60 * 60);
のように書きます。
30日だったら更に30掛ければいいです。
このタイムアウトは省略できますが、省略した場合は 0 がセットされたと同じ動作になり、セッションが切れるタイミングで切れます。
一般的にはブラウザを閉じるタイミングになります。
省略も出来ますが、指定するのが一般的な使い方になるかと思います。
それと第4引数にパスを指定できます。
これは使わない場合が多いですが、サブディレクトリに管理システムを配置しそのシステムでしかクッキーを使わない場合はパスにサブディレクトリを設定したりします。
setcookie($key, $value, time()+24*60*60, "/subdir");
上のように書いたら、subdir 配下にアクセスされたときのみ有効になります。
デフォルト値は、クッキーがセットされたときのカレントディレクトリです。
例えば、https://swell.dev-lib.work/subdir/ にアクセスしてクッキーに何か保存した場合はsubdir 配下にアクセスされたときのみ有効になります。
PHPでクッキーからデータを取得する方法
セットするときと違い取得するときは配列を操作するときと同様です。
$name = $_COOKIE['name'];
このように書くと以前に追加した name の値が取得できます。
ただ、この場合以前にクッキーにデータを追加していなかった場合にはエラーになります。
クッキーにアクセスしてデータを取得するときには、クッキーにデータがあるかチェックする必要があります。
if(isset($_COOKIE['name'])) {
$name = $_COOKIE['name'];
}
このように isset() を使ってチェックしてから取得すれば大丈夫です。
セッションを使ってカウントを表示させるだけのサンプル
<html>
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>
<?php
if(isset($_COOKIE['count'])) {
$count = $_COOKIE['count'];
} else {
$count = 0;
}
echo $count;
$count++;
setcookie('count', $count, time() + 60);
?>
</body>
</html>
上のコードは画面にカウントを表示させるだけの簡単なサンプルです。
初期表示時は 0 が表示されます。
画面を更新すると 1, 2, 3 ・・・ と増えていきます。
通常は画面を何度開いても同じカウントが表示されるような画面になってしまいますが、以前に開いたときの情報をクッキーに保持しているため開く度にカウントアップしていきます。
クッキーを使って何ができる?
例えばログインしていないと見れないページの作成なんかもできます。
これはセッションでも出来ますが、クッキーで行うほうが多いのかな?
あとクッキーはブラウザにデータを保存するので、ブラウザ上で動くJavaScriptからもアクセス出来ます。
jQueryを使えば簡単にクッキーにセットしたり取得したり出来ます。
jQueryでセットしたクッキーをPHPで取得することも出来ます。
操作しやすいページを作る上でこういったデータのやりとりも使えますよ。
まとめ
クッキーをPHPで扱うときにはセッション同様配列になっている。
クッキーを使う前に session_start() なんかを書く必要は無い。
配列で出来ているが、セットするときには setcookie() を使い、有効期限はしっかり設定する。
必要な場合はパスの指定も行う。これをうっかりしててバグることはよくありました。(僕だけかな?)
クッキーはjQueryからもアクセスできます。










コメント