• []
  • []
  •  
  • del.icio.us 
  •  
  • Yahoo!֥åޡϿ 

symfonyでセッションにデータベースを使用する

PHP 求人 募集 Symfony CakePHP Smarty Ruby on Rails

symfonyでセッションにデータベースを使用する 概要

最近では負荷分散にスケールアウト(サーバの台数を増やす)させることが多い。
そうなるとサーバが一台の時に起こらなかった問題が発生する。
セッションもその内の一つ。
PHPの標準セッションはファイルを使用する。
ファイルはローカルにしか置けないため、
Webサーバーが切り替わった瞬間にセッションが切れるのだ。

それを回避するアプローチとしてnfsとセッションサーバがある。
nsfは実装が楽な反面、単一障害点(そこが壊れたらシステムが止まる)を作ってしまう。
また、セッションファイル数が一定値を超えると全然動かなくなど利用価値は全くない。
もう一つのアプローチはセッションサーバだ。
セッション用にサーバを設け、共通のセッションとして利用する一般的な方法。
モジュールにはmemcachedやデータベースを用いる。

symfonyには標準でデータベースのセッションをサポートしている。
MySQL, PostgreSQL, PDOをサポートしている。
PDOが使えるので実質どのデータベースでも可能だ。
すでに利用しているデータベースと揃えるのがいいだろう。
今回はMySQLを用いたセッションデータベースの利用をやってみよう。

symfonyでセッションにデータベースを使用する 詳細

セッションテーブル作成

データベースに以下のクエリを発行。

CREATE TABLE `session_storage` (
  `session_id` varchar(255) NOT NULL,
  `session_data` longtext NOT NULL,
  `session_time` bigint(20) NOT NULL,
  PRIMARY KEY  (`session_id`)
) ENGINE=MyISAM;

設定ファイル変更

database.ymlが以下のような設定だったとすると、

all:
  propel:
    class:          sfPropelDatabase
    param:
      dsn:          mysql://root:@localhost/dbname

factories.ymlを以下のようにする。

all:
  storage:
    class: sfMySQLSessionStorage
    param:
      database: propel
      session_name: symfony
      db_table: session_storage
      db_data_col: session_data
      db_id_col: session_id
      db_time_col: session_time

symfonyでセッションにデータベースを使用する

利用方法は通常のセッションの利用方法と全く同じ。
symfonyでセッションを使うを参照のこと。


framework/symfony/database_session.txt · 最終更新: 2007/06/28 01:30 by dozo