セッションを開始すると、サーバ側に値を保存することができます。クライアント毎に色々な値が書き込まれますが、セッションIDを識別子としてどのクライアントが保存した値かは識別できます。サーバ側に保存する値をセッション変数と言います。セッション変数は複数保存できるので様々な値を保存できます。
クッキーだけを使って値をクライアント側に保存する場合は、盗み見られる場合などもあります。セッションでは、値がサーバ側にセッション変数として保存されるので、大事なデータを扱う場合はセッションをできる限り使います。
動作環境
- cakephp-2.5.2
CakePHPコントローラーでは 次のSessionComponent を使用します。ちなみに、ビューでは SessionHelper を使用します。どこからでも使用可能な CakeSession でセッションにアクセスすることも出来ます。
-
SessionComponent::write($name, $value)
- キー$name に、$value をセッションとして格納します。 $name には、ドット記法の配列を使用できます。
-
SessionComponent::read($name)
- セッション内の $name というキーの値を返します。 もし $name が null の場合、セッション全体の値を返します。 キー存在しない場合は null が返されます。
-
SessionComponent::check($name)
- セッションの値がセットされているかチェックするために使用します。 存在する場合は true を、存在しない場合は false を返します。
-
SessionComponent::delete($name)
- $name キーのセッションをクリアします。
- ブラウザーでクッキーを使用不可にすると、”初めてです”表示が毎回表示される。CakePHPのセッション管理は、クッキーを使用していることがわかる。
- セッションIDは、同じブラウザだと、$this->Session->delete()でセッション変数を削除しても、同じ値が使用される。
- CakeSession::start()を実行しなくても、$this->Session->write()を実行するとセッションは開始される。
CakePHPコントローラーでのSessionComponentの使用例を次に示します。セッション変数が登録されていないと”初めてです”と表示し、以降、アクセス回数が表示され、7回目になると、セッション変数が削除され、”初めてです”と表示します。
$this->log($this->Session->id(), LOG_DEBUG); if($this->Session->check('no6')){ $this->Session->write('no6',$this->Session->read('no6')+1); $num = $this->Session->read('no6'); print_r($num."回目です"); if($num > 6){ $this->Session->delete('no6'); } } else{ $this->Session->write('no6', '0'); print_r("初めてです"); }
CakePHPでのセッションは次のようになっています。