読者です 読者をやめる 読者になる 読者になる

紺屋高尾

ぬしの女房はんに、わちき、なりたいんざます。来年三月十五日、年季(ねん)が明けるんざます。そのときは眉毛落として歯に鉄漿(かね)染めて、ぬしの傍に参りんすよって、お内儀(かみ)さんにしてくんなますか?

Ruby on RailsでSessionをDBで管理する方法。

Ruby on Rails

 またもメモ書き。


Railsは2.0からセッションをクッキーに保存するのがデフォルトになりました。
正し、クッキーは4KBが上限となっておりアプリケーションの構造上、4KBだと厳しい場合もあるかと思います。
そんな時はActiveRecordを使用して、SessionをDBに保存できます。

まずは、DBにSessionTableを作成します。
#rake db:session:create
#rake db:migrate


次に、RailsにSessionをクッキーではなくDBで管理しろと教えてやります。
config/environment.rbに以下を追記します。


config.action_controller.session_store = :active_record_store


これで、例えばログインシステムを作ってログインすると!
ActionController::InvalidAuthenticityToken
こんなエラーがでます。


これはCSRF (Cross-Site Request Forgery)っていうのを防止しています。
CSRFとは(http://e-words.jp/w/CSRF.html

このエラーの回避方法は、app/controllers/application_controller.rbに以下を追記します。
protect_from_forgery :secret => 'セキュリティトークン文字列'


これでOKです。
かなりはしょっているので、もっと知りたい、上手く行かない!って人は
ActionController::InvalidAuthenticityToken
ググると色々と出てきますよ。