我如何清除所有铁路会话?

fen*_*nec 29 session ruby-on-rails

这是我的代码:

if session[:firsttimestart].nil? 
else
  @firsttime = false
end

if @firsttime == true
  initglobals()
end
session[:firsttimestart]=false
Run Code Online (Sandbox Code Playgroud)

问题是当我关闭服务器并返回应用程序时,会话[:firsttimestart]仍为false.它以某种方式将此变量存储在我的系统中而没有到期日期,因此不会调用iniglobals().我试图使用rake tmp:clear但它没有用.每次重新启动服务器时,如何清除系统中正在使用的所有会话?

Yev*_*niy 49

无论是DB还是cookie存储,都可以使用 rake tmp:sessions:clear

  • @Nick 这仅适用于 DB 会话存储,cookie 存储存储客户端的所有内容,请参阅 http://guides.rubyonrails.org/security.html#session-storage 和 http://api.rubyonrails.org/classes/ActionDispatch /Session/CookieStore.html 了解详情 (2认同)

Ana*_*hah 26

如果您将会话存储在数据库中,那么

rake db:sessions:clear
Run Code Online (Sandbox Code Playgroud)


bja*_*bel 6

在Rails 4中,接受的答案(rake db:sessions:clear)不再有效,因为ActiveRecord :: SessionStore被提取到active_record-session_storegem中.(详见此处)

您现在可以安装active_record-session_storegem并rake db:sessions:clear像在Rails 3中一样使用,或者创建一个如下所示的自定义Rake任务:

namespace :db do
    namespace :sessions do
        desc "Clear ActiveRecord sessions"
        task :clear => :environment do
            sql = 'TRUNCATE sessions;'
            ActiveRecord::Base.connection.execute(sql)
        end
    end
end
Run Code Online (Sandbox Code Playgroud)


who*_*ni9 5

在 Rails 5 中,如果使用 ActiveRecord:

ActiveRecord::SessionStore::Session.delete_all

或者更细粒度:

# For example schedule this once a day`
ActiveRecord::SessionStore::Session.where(["updated_at < ?", 2.weeks.ago]).delete_all
Run Code Online (Sandbox Code Playgroud)