Ruby on rails designe/Warden/Rails:服务器端会话存储

Ruby on rails designe/Warden/Rails:服务器端会话存储,ruby-on-rails,session,devise,warden,Ruby On Rails,Session,Devise,Warden,我在Rails应用程序中使用,我可以通过user\u sessionhash设置会话数据。但是,所有会话数据都存储在一个cookie中,这会导致网络开销,并且当数据超过4KB时,很容易发生破坏 我更愿意将会话数据存储在服务器端,例如数据库、memcached甚至内存中(我不太担心负载平衡问题)。在我重新发明轮子之前,有没有什么既定的方法可以做到这一点 (我知道我可以简单地将字段添加到用户模型中,但我更希望只使用[JSON序列化]自由格式的散列,以保持简单。)您正在寻找ActiveRecordSt

我在Rails应用程序中使用,我可以通过
user\u session
hash设置会话数据。但是,所有会话数据都存储在一个cookie中,这会导致网络开销,并且当数据超过4KB时,很容易发生破坏

我更愿意将会话数据存储在服务器端,例如数据库、memcached甚至内存中(我不太担心负载平衡问题)。在我重新发明轮子之前,有没有什么既定的方法可以做到这一点


(我知道我可以简单地将字段添加到用户模型中,但我更希望只使用[JSON序列化]自由格式的散列,以保持简单。)

您正在寻找ActiveRecordStore。这是栏杆

我认为Rails 3就是这样,对吗?那么,我如何将其与Desive结合使用呢?我是否应该将
当前用户.id
作为会话id传递?不,这将破坏服务器会话存储的一半功能。我不确定如何实现它,但从概念上讲,您在客户端有会话。它有一个id,您可以使用
session\u id
在服务器上查找会话,这是您获取用户的方式,或者说,由于服务器端会话的一半目的是隐藏用户,因此whateverIt无法实现这一目的。会话更像是“使用浏览器的人”,而不是用户。e、 g.如果您同时登录到两个浏览器,那么每个浏览器的会话应该是唯一的,这就是为什么用户id不是为会话设置密钥的最佳方法的一个示例。另一个例子是,如果您的站点需要在有人登录之前使用会话。我不明白为什么如此广泛使用的gem会打破存储记录ID而不是序列化对象的标准惯例。