Rails Sessions表属性,了解activerecord-session_store

时间:2015-02-24 18:24:24

标签: ruby-on-rails session activerecord

我试图理解存储在数据库中会话表中的特定记录与存储在会话cookie 中的会话信息之间的差异。 activerecord-session_store 文档中有一部分让我感到困惑。文档位于:https://github.com/rails/activerecord-session_store

因此无论出于何种原因,我想要一个会话表而不是仅使用会话cookie。我添加了gem:gem "activerecord-session_store"。然后我执行rails generate active_record:session_migration创建迁移,在rake db:migrate之后在数据库中构建会话表。

该会话表包含两个主要列:session_id(类型为字符串)和data(类型为文本)。

第一个问题:session_id?究竟是指什么? session_id是否等于主键:id

我的第二个问题围绕专栏的文档说明:data。此列的类型为text。根据{{​​3}},text数据类型的最大大小为2,147,483,647字节,因此我假设这是此列可容纳的最大字节大小。但是, activerecord-session_store 文档声明:

  

data(文字或长篇文字;如果会话数据超过65KB,请小心)。

接着说:

  

如果您编写的数据大于列的大小限制,则会引发ActionController :: SessionOverflowError。

第二个问题:当数据类型text可以容纳2,147,483,647字节时,为什么数据列限制为65KB?我认为我可能想要一个会话表的主要原因之一是因为我想存储的内容比会话cookie可以存储的更多(这是4093字节)。

第三个问题:如何设置data列可以存储超过65KB的信息?

第四个问题:active_record-session_store似乎只对数据进行编码。由于会话表位于我的服务器上而不是用户的cookie中,因此编码数据而非加密是否安全?是否有必要加密会话data

1 个答案:

答案 0 :(得分:1)


第一个问题:否,session_idid不一样(尽管您可以将其配置为相同,如activerecord-session_store文档中所述)。

第二个问题: 65kB是传统的最大值。 text列的大小 - 请参阅here。如果存储的空间超过65kB,它会变为longtext(至少我是这样理解的,但是没有尝试过)。

第三个问题:看到第二个答案,虽然我不完全确定。我认为更重要的问题是:为什么要存储更多? ;)

由于安全原因,

第四:编码不会发生。数据已编码......

  

...将最广泛的二进制会话数据存储在文本列中

(根据this

希望这有帮助!