[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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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'));
    }
}

 

1
2
3
4
5
6
7
// セッションを保存
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 パーマリンク