2011-07-22 75 views
5

当存储在数据库中的会话限制为USER_DATA场是文本的大小数据的大小...?不像4KB一般的cookie。笨会话大小限制

+0

我不确定。但如果是这样,那将是非常愚蠢的。 –

+0

如果保存到数据库,数据的确会受到保存数据的字段大小的限制。所以如果你使用'TEXT',你应该有足够的存储空间。 –

+0

如果你看看session.php的第293行,它仍然会设置cookie。 – ringerce

回答

4

为了进一步阐明我上面的评论,当您选择将会话数据保存到数据库中时,CodeIgniter不会设置cookie(当然除了会话ID之外),但会保存它将设置的所有信息在你的数据库的cookie中。

如果你看一下在位于./system/libraries/Sessionsess_write,如果你启用了使用一个数据库,你会看到,它采用序列化的serialize数据,并直接将其保存到数据库中。 保存到数据库时CodeIgniter施加的长度没有限制。

为了您的方便,这里有一个链接至源代码:https://bitbucket.org/ellislab/codeigniter/src/fe2247a927ab/system/libraries/Session.php#cl-252

唯一的限制是您选择用来将数据保存到数据库中的字段。有关MySQL数据类型存储要求的更多信息,请阅读this

+0

那么50kb左右的会话不会导致CI有问题?我一直有问题,我的会话数据在探查器中输出,但在控制器中不可用。我切换到这个会话库http://codeigniter.com/wiki/Session_Hybrid/,问题得到解决。 – ringerce

+0

@ringerce - 这不应该是一个问题。会话本身本质上是另一个数组,在读取或保存时被序列化和非序列化(除非使用cookie)。我在会话中存储[Doctrine](http://www.doctrine-project.org/)对象,这些对象通常很大而没有任何问题。 –

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 IF不使用数据库。

1

我发现了同样的“大小限”问题,连我都ci_session表用于存储

我只是在user_data = longtext和我的问题的数据类型更改解决

虽然会话大小限制为LONGTEXT的尺寸不UNLIMITED