クッキーとセッション

 

クッキー

クッキーはブラウザにデータを保存します

 

基本的にプログラムが一連のフロー(流れ)を終えると変数に格納した情報は失われてしまいます。 セッションはブラウザを開いている最中はその情報を保持しておける仕組みです。これにより、クライアント(サイトを訪れた人) がログインしているという情報をページが遷移した後も引き継ぐことができます。また、ショッピングサイトのカート機能でも見ることのできる仕組みですね。

 

上記コードがクッキーを使用した一例です。
setcookie('visited', $count, time() + 60 * 60 * 24 * 30);

setcookieでクッキーをスタートさせています。第一引数にクッキー名(ここでは「visited」)、第二引数は保持する値(ここでは初回が「1」)、第三引数は制限時間です。制限時間は1970年からの秒数を入れる必要があります。time( )で1970年から現在までの秒数が取得できるので、ここではさらに60秒×60分×24時間×30日で1カ月分の秒数を設定しています。これにより、1カ月間はクライアントのパソコンに情報が保持されることになります。

二回目以降に訪れた場合は、

この箇所に反応して数値が1足されます。訪問ごとに表示される数字が1ずつ上がっていきます。

クッキーの削除

クッキーの削除コードは以下の通りです。

 

クッキーを削除せよ、という命令は無いので、ここでは強制的に第三引数を過去の時間にしています。-3600は例えばなのでマイナスであればどのような数字でもかまいません。これでクッキーデータが削除されます。

セッション

セッションはサーバにデータを保存します

 

セッションもCOOKIEの仕組みを利用しています。ただし、セッションではIDだけをブラウザ側に保存し、キーや要素の情報はサーバ側で保管します。 ブラウザ側に保管することでより安全に情報を扱うことができるようになり、ログイン認証機能などに利用されています。 COOKIEは比較的長期的にブラウザに情報を保存するのに対し、SESSIONはサイトを訪問中にだけ情報を保持します。つまり、ブラウザを閉じれば 情報も破棄されるということです。(情報を保持する時間は、設定により変更が可能です。)

それではサンプルコードを見ていきましょう。

セッションを使用するにはsession_start()が必要です。こちらのコードはセッションを使用するすべてのページで必要になります。その後の書き方自体はクッキーとほぼ変わらないですね。値がサーバ側に保持されるという点でクッキーとは異なります。

セッションの削除

セッション削除用のコードを見ていきましょう。

 

こちらは クッキーデータの削除に比べてずいぶん複雑ですね。$_SESSION = array();でセッション変数の中身は空にできるのですが、加えて、setcookie($session_name, '', time() - 3600);でクッキーデータの削除、session_destroy();でセッションIDの削除を行う必要がります。クッキーデータの削除が必要な理由は、セッションはクッキーの仕組みを応用したものだからです。クライアントのパソコン側には乱数の形でクッキーデータが保持されます。このデータから中身を推測することはできません(サーバ側に保持しているデータの管理番号のようなものです)。これでセッションデータはすべて削除されます。

クッキーとセッションの使い分け

クッキーはパソコン側に値自体が保存されるので人に見られてもよいデータだけを扱いましょう。セッションはそれ以外のデータ全てに使います。どちらも保持できる期限等を設定できますが、個人データの扱いには注意しながら機能を作る必要があります。