セッションを使うと、ユーザが画面遷移してもユーザ特有の情報を失わないようにできます。
フツー、このセッション情報は、ユーザのクッキーの値と、サーバのセッション情報の値が同じものをつきあわせて、サーバのセッション情報を使います。
ではサーバにはどうやってセッション情報が保存されているかというと、デフォルトではファイルで保存されているそうです。
それをファイルではなくてDBに保存するには、例のレ・レ・レイク(by ジーコ)を使うらしいです。
早速やってみよう!
# rake db:sessions:create
(in /home/roruser/myApplication)
exists db/migrate
create db/migrate/001_add_sessions.rb
と、migrationファイルができました。
ちょっと中をのぞいでみましょう。
class AddSessions < ActiveRecord::Migration
def self.up
create_table :sessions do |t|
t.column :session_id, :string
t.column :data, :text
t.column :updated_at, :datetime
end
add_index :sessions, :session_id
add_index :sessions, :updated_at
end
def self.down
drop_table :sessions
end
end
sessions テーブルを作成するためのmigrationファイルのようです。
では、実際にmigrateしてしまいましょう
# rake db:migrate
(in /home/roruser/myApplication)
== AddSessions: migrating =====================================================
-- create_table(:sessions)
-> 0.3056s
-- add_index(:sessions, :session_id)
-> 0.2372s
-- add_index(:sessions, :updated_at)
-> 0.0926s
== AddSessions: migrated (0.6439s) ============================================
早いなあ。息をつく間もありませぬ。
どんなsessionsテーブルができたかというと、
$mysql explain sessions;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| session_id | varchar(255) | YES | MUL | NULL | |
| data | text | YES | | NULL | |
| updated_at | datetime | YES | MUL | NULL | |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
です。極めてフツーですね。特異な点は見当たらないです。
最後の仕上げに、config/environment.rb ファイルを変更します。
# Use the database for sessions instead of the file system
# (create the session table with 'rake db:sessions:create')
# config.action_controller.session_store = :active_record_store
という箇所がありまして、最後の行のコメントを50代の部長代理が家に帰って一息ついたときのカツラのように、気軽に取り外します。
# Use the database for sessions instead of the file system
# (create the session table with 'rake db:sessions:create')
config.action_controller.session_store = :active_record_store
後は、Webサーバを再起動すれば、セッション変数を使ったとき(たとえば、 session[:honyarara] のように)は、DBにセッション情報が保存されるようになります。
めでたしめでたし。
【広告】