2011-07-22 88 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