ActiveRecordStore を用いた Rails(2.3.11) のセッションの有効期限を設定する

Pocket

ActiveRecordStore を用いたセッションの有効期限の指定の仕方がなかなか載ってなかったので苦戦しました。ActiveRecordStore を用いた場合のセッション有効期限の設定の仕方は以下のようになります。

config/initializers/session_store.rb を編集

以下のモデル定義とクッキーの有効期間を追加します。クッキーの有効期限は 10 年後に指定しています。

ActionController::Base.session = {
  :key         => '_sample_session',
  :secret      => 'xxxxx',
  :expires => 10.years.from_now
}

...

class Session < ActiveRecord::Base
  def self.sweep(time_ago = nil)
    time = case time_ago
             when /^(\d+)m$/ then Time.now - $1.to_i.minute
             when /^(\d+)h$/ then Time.now - $1.to_i.hour
             when /^(\d+)d$/ then Time.now - $1.to_i.day
             else Time.now - 1.hour
           end
    self.delete_all "updated_at < '#{time.to_s(:db)}'"
  end
end

app/controllers/application_controller.rb を編集

application_controller.rb に以下のようなメソッド定義を追加します。

class ApplicationController < ActionController::Base
  # フィルタ
  before_filter :reset_session_expires

  protected

  # 1週間でセッションが切れるように設定
  def reset_session_expires
    Session.sweep('7d')
  end
end

これでおしまい!

参考

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください