1

我想使用扭矩箱并限制用户在 jruby rails 应用程序上的登录,以便他无法从多个浏览器登录。当有人登录并使旧会话无效时,我通过跟踪用户 ID 和会话 ID 来使用 activerecord 会话。

如何在 Torquebox 中做类似的事情?我在 TorqueBox::Session 模块上看不到类方法,所以我可以使其他会话无效,只是访问实例的方法。会话如何工作的机制尚不清楚。我在看这里:https ://github.com/torquebox/torquebox/tree/2x-dev/gems/web/lib

4

2 回答 2

0

如果您将当前会话对象存储在本地,例如current_session

TorqueBox::Session::ServletStore.load_session_data(current_session)

这将允许您查看当前会话数据,并附带一个姊妹功能,使您还可以在会话存储中设置数据store_session_data(...)

TorqueBox::Session::ServletStore.store_session_data(current_session, data)

您还可以设置data{}(empty hash) 以使其无效(对于大多数意图和目的)。

当前会话对象的可用性将根据范围而有所不同。例如,在 stomplet 中,我必须对订阅者进行一些自省以获取current_session对象以便查看会话数据:

class ChatStomplet
  # ...

  def on_subscribe (subscriber)
    @subscribers[ session(subscriber)[:current_user].username ] << subscriber
  end

  # ...

  def session (subscriber)
    TorqueBox::Session::ServletStore.load_session_data(subscriber.getSession)
  end
end

您可能也应该看一下ActionDispatch::Session::TorqueBoxStoreapi。

我个人还没有找到很多关于这方面的文档。事实上,我仍在寻找一种方法来查找所有当前活动的会话。如果他们实现AbstractStore 的接口将会有所帮助,因为与当前 Rails 约定的兼容性将大有帮助。

我知道这不是一个完整的答案,但希望它能为您的旅行提供一些启示。

于 2012-12-03T03:43:39.727 回答
0

TorqueBox(至少是 2.x)将 Java 会话 ID 存储在session[:session_id]. 如果您需要从中间件获取它,它可以在env['rack.session'][:session_id].

于 2013-10-30T18:53:13.263 回答