2013年8月30日金曜日

CakePHP セッションにデータベースを利用する

複数サーバーを利用するというので、通常のキャッシュを使用すると
お互いに参照先が違うという問題が発生。
CakePHP はデフォルトでデータベースを使ったセッションが提供されている
そうなので使ってみた。

まずは以下のクエリをデータベースで発行。

/*---------------------------------------------------------------------------*/

CREATE TABLE IF NOT EXISTS `cake_sessions` (
    `id` varchar(255) NOT NULL DEFAULT '',
    `data` text NOT NULL,
    `expires` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

/*---------------------------------------------------------------------------*/

次に core.php を編集。Session の設定が書いてあるところ。

/*---------------------------------------------------------------------------*/

Configure::write('Session', array(
    'defaults' => 'database',
));

/*---------------------------------------------------------------------------*/

データベースを使用するための設定はこれだけで十分です。
さっそくテスト。

/*---------------------------------------------------------------------------*/
Error: Table app_models for model AppModel was not found in datasource default.
/*---------------------------------------------------------------------------*/

エラー出たよ。なぜか app_models テーブルがないと怒られている。
試しに useTable を書き換えてみたら別のエラーで怒られた。
なので、使用するモデルを自分で指定する。

core.php に追加。

/*---------------------------------------------------------------------------*/

Configure::write('Session', array(
    'defaults' => 'database',
'handler' => array(
'model' => 'CakeSessions'
)
));

/*---------------------------------------------------------------------------*/

CakeSessions というテーブルを作り、そのモデルを呼び出すように変更。
エラーが出ることはなく、セッションもしっかり機能した。

0 件のコメント:

コメントを投稿