Ruby on rails Rails会话表属性,了解activerecord-session\u存储

Ruby on rails Rails会话表属性,了解activerecord-session\u存储,ruby-on-rails,session,activerecord,Ruby On Rails,Session,Activerecord,我试图理解存储在数据库会话表中的特定记录与存储在会话cookie中的会话信息之间的区别。activerecord-session\u store文档中有一部分让我感到困惑。文件载于: 因此,无论出于什么原因,我都希望有一个会话表,而不仅仅是使用会话cookie。我添加了gem:gem“activerecord-session\u存储”。然后我执行rails生成active\u record:session\u migration,一旦我rake db:migrate,它将创建在数据库中构建会话表

我试图理解存储在数据库会话表中的特定记录与存储在会话cookie中的会话信息之间的区别。activerecord-session\u store文档中有一部分让我感到困惑。文件载于:

因此,无论出于什么原因,我都希望有一个会话表,而不仅仅是使用会话cookie。我添加了gem:
gem“activerecord-session\u存储”
。然后我执行
rails生成active\u record:session\u migration
,一旦我
rake db:migrate
,它将创建在数据库中构建会话表的迁移

该sessions表包含两个主列:
session\u id
(类型为string)和
data
(类型为text)

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

我的第二个问题围绕着专栏的文档注释:
data
。此列的类型为
text
。根据
text
datatype的最大大小是2147483647字节,因此我假设这是该列可以容纳的最大字节大小。但是,activerecord-session\u存储文档说明:

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

它接着说:

如果写入的数据大于列的大小限制,则将引发ActionController::SessionOverflowError

第二个问题:当数据类型
文本
可以容纳2147483647字节时,为什么数据列被限制为65KB?我认为我想要一个sessions表的主要原因之一是因为我想要存储比sessions cookie所能存储的更多的东西(4093字节)

第三个问题:如何使
数据
列能够存储超过65KB的信息

第四个问题:活动记录会话存储似乎只对数据进行编码。由于会话表位于我的服务器上而不是用户的cookie中,所以数据编码而不是加密是否安全?是否需要加密会话的
数据


第一个问题:否,
session\u id
id
不相同(尽管您可以将其配置为相同,如activerecord-session\u存储文档中所述)

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

第三个问题:见第二个答案,尽管我不能完全确定。我认为更重要的问题是:你为什么要储存更多

第四:由于安全原因,编码未发生。数据被编码

…在文本列中存储范围最广的二进制会话数据

(根据)

希望这有帮助