通过
将会话存储在数据库中时$config['sess_use_database'] = TRUE;
数据的大小是否限制为user_data字段的大小,即TEXT ...?不像普通的cookie那样4kb。
答案 0 :(得分:4)
为了进一步澄清上面的评论,当您选择将会话数据保存在数据库中时,CodeIgniter不会设置cookie(当然不是会话ID),而是保存它将设置的所有信息。数据库中的cookie。
如果您查看位于sess_write
的{{1}}类中的Session
,如果您已启用数据库,则会看到它序列化了数据使用./system/libraries/
并将其直接保存到数据库。 CodeIgniter在保存到数据库时对长度没有限制。
为方便起见,这里是源代码的链接:https://bitbucket.org/ellislab/codeigniter/src/fe2247a927ab/system/libraries/Session.php#cl-252。
唯一的限制是由您选择用于在数据库中保存数据的字段设置。有关MySQL数据类型存储要求的详细信息,请阅读this。< / p>
答案 1 :(得分:1)
即使我有ci_session
表用于存储
我只是更改user_data = longtext
的数据类型和我的问题解决
虽然会话大小仅限于长篇文章的大小而不是无限制
答案 2 :(得分:0)
我猜这回答了你的问题。来自班级代码:
// Are we saving custom data to the DB? If not, all we do is update the cookie
if ($this->sess_use_database === FALSE)
{
$this->_set_cookie();
return;
}
甚至评论都来自班级本身。所以如果不使用数据库,它会更新cookie。
答案 3 :(得分:0)
CI session docs为您的会话数据指定 BLOB 数据列。
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(128) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
KEY `ci_sessions_timestamp` (`timestamp`)
);
根据MySQL Docs,此存储类型需要 L + 2个字节,其中L <2 ^ 16 。这意味着BLOB(因此会话表中的序列化数据)为limited to 65,535 bytes。请注意,此限制适用于会话数据的长度,一旦它被序列化,相对于RAM中使用的存储量,这可能会导致一些膨胀。
您当然可以在定义会话表时选择其他数据类型。例如, MEDIUMBLOB (而不是blob)将为您提供16MB。这可能会或可能不会带来性能问题。