用户登录时,我将用户ID保存到数据库session[:user_id]
。我该怎么做才能找出登录用户的数量?
我使用 ActionDispatch::Session::CacheStore
进行会话存储。
请指导我实现目标的正确方法。
答案 0 :(得分:3)
可能最好的解决方案是切换到使用Active Record Session存储。这很容易 - 你只需要添加(并运行)迁移来创建会话表。跑吧:
rake db:sessions:create
然后将会话存储配置添加到:config/initializers/session_store.rb
,如下所示:
YourApplication::Application.config.session_store :active_record_store
一旦完成并重新启动服务器,Rails现在将会话存储在数据库中。
通过这种方式,您将能够使用以下内容获取当前登录用户数:
ActiveRecord::SessionStore::Session.count
虽然仅计算最近更新的数据会更准确 - 比如最后5分钟:
ActiveRecord::SessionStore::Session.where("updated_at > ?", 5.minutes.ago).count
根据您需要查询此值的频率,您可能需要考虑缓存值或在after create或after destroy回调中递增/递减缓存值,但这似乎有点过分。
答案 1 :(得分:0)
创建或销毁会话时,您可以尝试实现递增或递减的会话变量,并使用一些帮助程序来递增/递减计数器。
def sessions_increment
if session[:count].nil?
session[:count] = 0
end
session[:count] += 1
end
def sessions_decrement
if session[:count].nil?
session[:count] = 0
end
session[:count] -= 1
end