我使用的是active record store for rails sessions store。在很短的时间内,sessions表的大小增加了很多。这些会话行在一段时间后如何转储。或者我应该在24小时内手动清除它们一次?
sessions
mfpqipee1#
在Rails 3.2中使用标准的ActiveRecord调用。对于日期,传递一个与“Remember me”持续时间相匹配的值。在我的示例中,这将清除所有两周内处于非活动状态的会话。
ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", 2.weeks.ago])
字符串正如@journeyer在下面所说的,如果使用Devise gem,可以引用Devise的配置。
ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", Devise.remember_for.ago])
型如果使用魔法宝石,可以参考魔法的配置。
ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", User.sorcery_config.remember_me_for.ago])
型
pod7payv2#
关于你的问题的一个很好的博客文章:http://blog.brightbox.co.uk/posts/clearing-out-rails-sessions解决方案是创建一个自定义rake任务:
task :clear_expired_sessions => :environment do sql = 'DELETE FROM sessions WHERE updated_at < DATE_SUB(NOW(), INTERVAL 1 DAY);' ActiveRecord::Base.connection.execute(sql) end
字符串.并使用cron job每天运行它。
eoigrqb63#
当你调用reset_session时rails会从会话表中删除那一行。但是并不是每个会话都会调用reset_session:如果用户没有注销就关闭了浏览器,那么浏览器会丢弃会话cookie,这样会话行就不会再被使用,但是reset_session不会被调用。Rails不会为你清除那些堆积的杂物--你可以自己决定是否做一些你认为合适的家务。在前面的一个任务中,我们使用cronjob来删除旧的会话行。
reset_session
pcww981p4#
不要运行SQL。已经有一个rake任务可以完成这个任务。
bin/rake db:sessions:trim
字符串运行bin/rake db:sessions:trim将删除最近30天内未更新的所有会话。参见rails文档。https://github.com/rails/activerecord-session_store/blob/master/README.md?plain=1#L31-L36
ruyhziif5#
我建议你使用cron作业之类的东西来清理你的rails会话。也许不是24小时,这取决于你想让用户会话可用多长时间。Rails为此提供了一个rake任务rake db:会话:清除
5条答案
按热度按时间mfpqipee1#
在Rails 3.2中使用标准的ActiveRecord调用。对于日期,传递一个与“Remember me”持续时间相匹配的值。在我的示例中,这将清除所有两周内处于非活动状态的会话。
字符串
正如@journeyer在下面所说的,如果使用Devise gem,可以引用Devise的配置。
型
如果使用魔法宝石,可以参考魔法的配置。
型
pod7payv2#
关于你的问题的一个很好的博客文章:http://blog.brightbox.co.uk/posts/clearing-out-rails-sessions
解决方案是创建一个自定义rake任务:
字符串
.并使用cron job每天运行它。
eoigrqb63#
当你调用
reset_session
时rails会从会话表中删除那一行。但是并不是每个会话都会调用reset_session
:如果用户没有注销就关闭了浏览器,那么浏览器会丢弃会话cookie,这样会话行就不会再被使用,但是reset_session
不会被调用。Rails不会为你清除那些堆积的杂物--你可以自己决定是否做一些你认为合适的家务。在前面的一个任务中,我们使用cronjob来删除旧的会话行。
pcww981p4#
不要运行SQL。已经有一个rake任务可以完成这个任务。
字符串
运行
bin/rake db:sessions:trim
将删除最近30天内未更新的所有会话。参见rails文档。https://github.com/rails/activerecord-session_store/blob/master/README.md?plain=1#L31-L36
ruyhziif5#
我建议你使用cron作业之类的东西来清理你的rails会话。也许不是24小时,这取决于你想让用户会话可用多长时间。Rails为此提供了一个rake任务
rake db:会话:清除