我试图理解存储在数据库中会话表中的特定记录与存储在会话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
?