カテゴリ: データベース

Sessionをデータベースで管理する

パーマリンク 2009/05/03 12:33:21 著者: cakephp メール
カテゴリ: 設定, コンポーネント, データベース, PostgreSQL, コントローラー

CakePHP1.2

CakePHPではSessionをデータベースで簡単に管理できます。

1.core.phpの設定

通常のファイルで管理する方法からデータベース管理に変更

Configure::write('Session.save', 'php');
↓
Configure::write('Session.save', 'database');


保存するテーブル名の指定

//Configure::write('Session.table', 'cake_sessions');
↓
Configure::write('Session.table', 'cake_sessions');


Sessionテーブルを格納するデータベースの指定

//Configure::write('Session.database', 'default');
↓
Configure::write('Session.database', 'default');

2.テーブル作成

上記で設定したテーブルを作成
必要な項目は、セッションID、データ、有効期限

CREATE TABLE cake_sessions (
    id VARCHAR(255) NOT NULL default '' PRIMARY KEY,
    data TEXT NOT NULL DEFAULT '',
    expires INT DEFAULT NULL
);

3.利用

後は通常のSessionの使い方を行うだけです。
Sessionの書き込み

$this->Session->write('name', 'hoge');

Sessionの読み込み

$this->Session->read('name');

PostgreSQL のINFORMATION_SCHEMAについて

パーマリンク 2008/08/21 19:14:53 著者: cakephp メール
カテゴリ: モデル, データベース, PostgreSQL

CakePHP1.2 RC2

開発中に debug の設定を 2 などにしておくとページを表示させる為に利用している SQL を出力してくれて大変便利です。
PostgreSQL を利用している場合、その SQL の一番上に表示される

SELECT table_name as name FROM INFORMATION_SCHEMA.tables WHERE table_schema = 'public';

などのスキーマに関する SQL の処理時間が結構かかります。

本番に導入した際にこんなに時間を取られては困るという場合は、debug を 0 にすれば解決します。
(本番環境では debug を 0 にするのは当然ですね)


この仕組みについてです。

スキーマ情報は app/tmp/cache/models/ 配下にキャッシュされるのですが、cake/libs/model/datasources/datasource.php を見てみると、

function __cacheDescription($object, $data = null) {
	if ($this->cacheSources === false) {
		return null;
	}
	if (Configure::read() > 0) {
		$expires = "+15 seconds";
	} else {
		$expires = "+999 days";
	}
	if ($data !== null) {
		$this->__descriptions[$object] =& $data;
	}

	$key = ConnectionManager::getSourceName($this) . '_' . $object;
	$cache = Cache::read($key, '_cake_model_');

	if (empty($cache)) {
		$cache = $data;
		Cache::write($key, $cache, array('duration' => $expires, 'config' => '_cake_model_'));
	}

	return $cache;
}

デバック情報が 0 でない場合は、キャッシュの有効期間が15秒とあります。
これの影響で、ページを表示する度にスキーマの SQL が呼ばれていたという訳です。

一方、デバック情報を 0 とした場合、有効期間が999日になっているので、毎回スキーマの SQL が呼ばれなくなります。

これで安心して本番導入できます。

#本番環境ではスキーマ情報が保持され続けるので、テーブルの構造を途中で変えたような時は、このキャッシュを削除しないと反映されないので注意しましょう。

テスト環境でのDBの切り替え方

パーマリンク 2008/07/02 17:31:53 著者: cakephp メール
カテゴリ: データベース

データベースの接続情報は app/config/database.php に記載するのですが、ここの値を本番環境とテスト環境で書き換えるのは手間ですし、間違ってアップしてしまう可能性もあるので、できればやりたくありません。

そんな時には、CakePHP 環境に応じてDBの設定を変えるが参考になります。

色々な方法が紹介されていますが、下記の方法がやりやすいかなと思います。

1.httpd.conf に下記の内容を追加

SetEnv CAKE_DB_CONFIG test


2.app/app_model.php に下記の内容を追加

<?php
class AppModel extends Model
{
    function __construct($id = false, $table = null, $ds = null)
    {
        $this->useDbConfig = empty($_SERVER['CAKE_DB_CONFIG']) ? $this->useDbConfig : $_SERVER['CAKE_DB_CONFIG'];
        parent::__construct($id, $table, $ds);
    }
}


これでサーバー側で利用する DB の接続情報を判断して取得してくれるので、開発側としては意識せずに取り組めます。

PostgreSQLの持続的接続を解除する方法

パーマリンク 2008/06/14 11:36:16 著者: cakephp メール
カテゴリ: データベース, PostgreSQL

CakePHP で PostgreSQL を利用する場合、デフォルトのままだと持続的接続(pg_pconnect)になっています。
持続的接続を解除したい時は、明示的に指定しなければなりません。

CakePHP1.1

var $default = array('driver'   => 'postgres',
                     'connect'  => 'pg_connect',
                     'host'     => 'localhost',
                     'login'    => 'user',
                     'password' => 'password',
                     'database' => 'project_name',
                     'prefix'   => '');

'connect' の設定を 'pg_pconnect' とすると、持続的接続になります。


CakePHP1.2

var $default = array('driver'      => 'postgres',
                     'persistent'  => false,
                     'host'        => 'localhost',
                     'login'       => 'user',
                     'password'    => 'password!',
                     'database'    => 'project_name',
                     'prefix'      => '');

'persistent' の設定を true とすると、持続的接続になります。

2017年12月
 << <   > >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

CakePHPに関する情報をまとめていきます。

開発スピードがアップできればうれしいです。

>>連絡はこちらへどうぞ



CakePHP最新版
CakePHP 1.2.3.8166


CakePHPの書籍

CakePHPによる実践Webアプリケーション開発

CakePHP1.2で作成する人にオススメ。
とても参考になります。

まるごとPHP!(vol.2)

安藤さんの解説が載っています。
AmazonのPagination部分は参考になります。

CakePHPによるWebアプリケーション開発

まだ読んだことありません

CakePHPポケットリファレンス
CakePHPポケットリファレンス
CakePHP1.2 でやるなら、これがあると何かと便利♪

CakePHP徹底入門
CakePHP徹底入門
CakePHP1.2 を今から始めるならここから

Fast CakePHP
Fast CakePHP
シンプルでわかりやすい CakePHP の入門書

CakePHPガイドブック
CakePHPガイドブック
CakePHP1.1 ではとても参考にした CakePHP 最初の入門書

検索

XMLフィード

16ブログ     powered by b2evolution