2011-07-22 47 views
5

Al almacenar la sesión en la base de datos a través deCodeIgniter límite de tamaño de la sesión

$config['sess_use_database'] = TRUE; 

es el tamaño de los datos limitados al tamaño del campo user_data que es TEXTO ...? No 4kb como una galleta normal.

+0

No estoy seguro. Pero si lo es, sería muy tonto. –

+0

Si guarda en una base de datos, los datos están de hecho limitados por el tamaño del campo al guardar los datos. Entonces, si usas 'TEXT', deberías tener suficiente espacio de almacenamiento disponible. –

+0

Si nos fijamos en la línea # 293 de session.php, aún establece la cookie. – ringerce

Respuesta

4

Para aclarar más mi comentario anterior, cuando elige guardar los datos de la sesión en una base de datos, CodeIgniter no establece una cookie (que no sea la id de la sesión por supuesto) pero guarda toda la información que se hubiera establecido en una cookie en su base de datos.

Si usted tiene un vistazo a la sess_write en la clase Session situado en ./system/libraries/, si se ha habilitado el uso de una base de datos, verá que serializa los datos utilizando serialize y lo guarda directamente a la base de datos. No hay restricciones en la longitud impuesta por CodeIgniter al guardar en una base de datos.

Para su comodidad, aquí hay un enlace al código fuente: https://bitbucket.org/ellislab/codeigniter/src/fe2247a927ab/system/libraries/Session.php#cl-252.

La única restricción se establece por el campo que eligió para guardar los datos en su base de datos. Para obtener más información sobre los requisitos de almacenamiento de tipo de datos de MySQL, lea this.

+0

¿Entonces una sesión de alrededor de 50kb no causaría problemas de CI? He tenido problemas donde los datos de mi sesión salían en el generador de perfiles pero no estaban disponibles en el controlador. Cambié a esta biblioteca de sesión http://codeigniter.com/wiki/Session_Hybrid/ y se resuelve el problema. – ringerce

+0

@ringerce - No debería ser un problema. La sesión en sí misma es esencialmente otra matriz que se serializa y se deserializa cuando se lee o guarda (a menos que use cookies). Guardo objetos [Doctrine] (http://www.doctrine-project.org/) en mi sesión, que tienden a ser bastante grandes sin ningún problema. –

0

Supongo que esto responde a su pregunta. del código de clase:

// 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; 
} 

incluso los comentarios son de la propia clase. entonces actualiza la cookie SI no usa la base de datos.

1

me encontré con el mismo tema "tamaño límite" Incluso he ci_session tabla para almacenar

Acabo de cambiar de tipo de datos de user_data = longtext y mi problema resolver

aunque el tamaño de la sesión se limita a tamaño de longtext NO ILIMITADO