[CakePHP] セッションを利用する

もともと PHP には $_SESSION があるので、それを利用すればよいのだが、CakePHP は $this->Session というう形で用意されている。

セッション ? CakePHP Cookbook v2.x documentation
http://book.cakephp.org/2.0/ja/core-libraries/components/sessions.html

残念ながら、$_SESSION と $this->Session と互換性はない模様。他のモジュールとのやり取りをするならば、$_SESSION を使うと良い。

■Model

Model はそのまま

■Controller

sess メソッドで id を保存しておいて、index で検索結果を出すという具合。

in Controller/TestController.php

	public function index($id=null) {
		if ($id==null) {
			// セッション内のIDを使う
			$id = $this->Session->read("Test.id");
			// session_start();
			// $id = $_SESSION['Test.id'];
		}
		if (isset($this->params['url']['id']))
			$id = $this->params['url']['id'];

		if ( $id != null ) {
			$this->set('Test',$this->Test->findAllById($id));
		} else {
			$this->set('Test',$this->Test->find('all'));
		}
	}

 

	// セッションを保存
	public function sess($id=null) {
		$this->Session->write("Test.id",$id);
		// session_start();
		// $_SESSION['Test.id'] = $id ;
		$this->redirect('.');
	}

/Test/sess/7 で URL を呼び出すと、/Test/index/7 と同じような呼び出しになる(内部で redirect している)。このときに、sess から index に渡すために $this->Session を使っている。このパターンだと、直接メソッド呼び出しをしたほうが安全か…まあ、URL が /Test/ になるので、それはそれで ok(アドレスが隠蔽化されるという意味で)。

$_SESSION[‘Test.id’] でも同じことができる。残念ながら、$_SESSION[‘Test.id’] と $this->Session->read(“Test.id”); は異なる値を示している。これは名前を「id」とかにしてもダメだった。

■View

View は同じ

■結果

/Test/sess/7 で呼び出すと、$this->Session に保存されて index で参照される。

カテゴリー: CakePHP パーマリンク