

Cakephp2 で DB の中身を検索し、検索結果の一覧を表示するページを作成しています。  
データ数が多いのでページネーションするようにしているのですが、検索後他のページに移ると検索状態が維持できずに消えてしまいます。ただ、そこでもう一度検索し直すか、現在のページを更新してから検索し直すと、検索状態を維持したままページを遷移することができます。

コードは以下の通りです。

[code]

    <?php
    class SampleController extends AppController {
        public $helpers = ["Html", "Form", 'UploadPack.Upload', "Session"];
        public $paginate = [
            "limit" => 10,
            "sort" => "created",
            "direction" => "desc"
        ];
    
        public function isAuthorized($user) {
            return true;
        }
    
        //トップページ
        public function index() {
            $conditions = [];
    
            debug(Router::url(NULL, true));
            //検索条件が送信されたら
            if ($this->request->is("POST")) {
                if (!empty($this->data["search"]["allSecand"])) {
                    $searchSum = $this->data["search"]["all"] . " " .  $this->data["search"]["allSecand"];
                } else {
                     $searchSum = $this->data["search"]["all"];
                }
    
                //それぞれのインプットに合わせた検索用SQL文を発行
                if ($searchSum) {
                    $conditions[] = $this->Sample->simpleSearch($searchSum);
                }
                //古いセッション削除
                if ($this->Session->check("conditions")) {
                    $this->Session->delete("conditions");
                    debug("conditions セッション削除");
                }
                if ($this->Session->check("search")) {
                    $this->Session->delete("search");
                    debug("search セッション削除");
                }
    
                //ページネーション後も検索条件を引き継ぐためにセッションで保持
                $this->Session->write("conditions", $conditions);
                //検索で入力された値をセッションで保持
                $this->Session->write("search", $this->request->data);
                debug("セッション書き込み");
                debug($_SESSION);
                //検索ボタンを押されたら必ず1ページ目から表示
                $this->request->params["named"]["page"] = 1;
            } else {
                if (preg_match("/domein.com\/$/", Router::url(NULL, true))) {
                    debug("セッション削除開始");
                    if ($this->Session->check("conditions")) {
                        $this->Session->delete("conditions");
                        debug("conditions セッション削除");
                    }
                    if ($this->Session->check("search")) {
                        $this->Session->delete("search");
                        debug("search セッション削除");
                    }
                    CakeSession::start();
                    debug($_SESSION);
                } else {
                    debug("セッション読み込み");
                    debug($_SESSION);
                    $conditions = $this->Session->read("conditions");
                    $this->request->data = $this->Session->read("search");
                }
            }
            $data = $this->paginate($conditions);
            $this->set("samples", $data);
        }
    
[/code]

消えるセッションは検索状態を格納している conditions と search だけで、ほかのセッションは残っています。

また、ローカル環境だと普通に動作するので、もしかしたらサーバー側の設定かもしれません。  
Apache のバージョンは 2.4 、PHP のバージョンは 5.6 です。

どこを直せば検索状態を維持したままページ遷移できるでしょうか？よろしくお願いします。


CC BY-SA 3.0
2017-03-09T08:05:44.320
33209
2017-03-09T08:05:44.320
18842
question
php cakephp session
Cakephp2 で検索内容を格納したセッションが消える