2012-07-26 41 views
1

一个新的会话我有一个抓住用户的Facebook朋友后台作业。检测使用Rails

我想这个后台作业的每一个登录的用户开始新的浏览器会话时触发。我不确定关于什么是Rails的“新”会话的技术定义,但理想情况下,只要用户在一段时间不活动后访问网站(例如,自上次访问以来> 30分钟)就会触发该技术。

我怎样才能在Rails的检测这样一个新的会话?感谢任何帮助。

回答

0

如果你使用的设计,你在users表中的列last_sign_in_at。它可以被您的后台作业用来检查用户是否最近访问过您的网站。

3

这是我所能做的来解决这个问题最好的。我正在使用会话变量。我的application_controller中有一个before_filter方法。似乎工作得很好,但我注意到有些特定的事情(例如Pusher)会重置会话变量,因此如果使用此解决方案进行监控,那么您肯定会进行监视。如果有人有一个更好的解决方案,我是耳朵。

def call_set_facebook_friends 
    if session[:new_session] == nil && signed_in? 
    current_user.background_set_facebook_friends 
    session[:new_session] = true 
    end 
end 
+0

感谢所以对于这种原始的解决方案,它的工作。我非常惊讶,rack/rails会话存储没有这个钩子,它非常标准的东西,就像在Java中一样,有一个事件回调/挂钩用于应用程序启动,会话启动等。像warden/devise这样的安全框架可以挂钩登录后,但是如果你想确保你的代码在会话的第一个请求上运行(如果甚至没有登录)似乎并不是一个标准的方法来做到这一点。我们尝试了一个扩展cookie_store的自定义会话存储,但不清楚如何做,get_session被调用并且sid已经设置 – bjm88 2015-10-21 19:48:32