- 更新日: 2014年8月29日
- Rails
Rails4でsession storeをActiveRecordに変更
Rails4では、session store(セッションの格納先)がデフォルトでCookie(クッキー)のみとなっています。session store に、activerecord や memcached, redis を利用するには、別途 gem のインストールが必要となる。今回は、session store を ActiveRecord に変更する例です。以下の gem を使う。
— 環境 —
Rails4.1
activerecord-session_store を Gemfile に追加してインストール
Gemfile
1 |
gem 'activerecord-session_store' |
インストール。
1 2 3 |
$ bundle install |
session_store に ActiveRecord を使うように指定
session_store.rb で activerecord-session_store を使うように指定します。
config/initializers/session_store.rb
1 |
Railsapp::Application.config.session_store :active_record_store, key: '_railsapp_session' |
デフォルトで、:cookie_store となっている箇所を :active_record_store に変更。
マイグレーションファイルを生成してマイグレーション実行
session 管理DBテーブル用のマイグレーションファイルを生成します。
1 2 3 |
$ bundle exec rails generate active_record:session_migration |
マイグレーションファイルを確認。
db/migrate/***_add_sessions_table.rb
1 2 3 4 5 6 7 8 9 10 11 12 |
class AddSessionsTable < ActiveRecord::Migration def change create_table :sessions do |t| t.string :session_id, :null => false t.text :data t.timestamps end add_index :sessions, :session_id, :unique => true add_index :sessions, :updated_at end end |
マイグレーション実行。
1 |
$ bundle exec rake db:migrate |
DB確認。
1 2 3 4 5 6 7 8 9 10 11 12 |
mysql> desc sessions; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | session_id | varchar(255) | NO | UNI | NULL | | | data | text | YES | | NULL | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | MUL | NULL | | +------------+--------------+------+-----+---------+----------------+ |
あとはサーバー再起動。Session テーブルのレコードに溜まっていく Session 情報は、一定時間経過後に cron などで削除するようにする。以下リンクの Ruby on Rails Guides#session-expiry を参考に、whenever で rake タスクか runner の設定を行うと良いですかね。
- – 参考リンク –
- Ruby on Rails Security Guide — Ruby on Rails Guides#session-storage
- Ruby on Rails Security Guide — Ruby on Rails Guides#session-expiry
- Railsでセッションを試してみる – yk5656 diary
- Railsを本番稼働させるときはnginxとsession storeの設定に注意 – Qiita
- Rails4でsessionの格納先をactive_record_storeにする – zakihayaメモ
- Rails3 to Rails4の変更点、気付いたことまとめ [俺の備忘録]
- memcachedサーバとruby on railsのdalliを使用してセッションを管理する
- RailsのセッションストアにRedisを使う | ひげろぐ
- SessionをActiveRecordで管理する – プログラマ憧れプログラマ日記
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!