¿Por qué es bueno guardar las sesiones en la base de datos?

He visto que Codeigniter tiene la facilidad de guardar valores de sesión en la base de datos.
Dice que guardar la sesión en la base de datos es una buena práctica de seguridad.

Pero creo que guardar la información de la sesión en la base de datos ayuda a mejorar el rendimiento.
Guardan solo algunos elementos de la sesión, como:

CREATE TABLE IF NOT EXISTS 'ci_sessions' ( session_id varchar(40) DEFAULT '0' NOT NULL, ip_address varchar(16) DEFAULT '0' NOT NULL, user_agent varchar(50) NOT NULL, last_activity int(10) unsigned DEFAULT 0 NOT NULL, user_data text NOT NULL, PRIMARY KEY (session_id) ); 

Pero si un sitio utiliza más variables de sesión como el nombre de usuario, la última vez que se conectó, etc., puedo guardarlos en la base de datos y usarlos en el progtwig.

¿Debo agregar estas columnas a la misma tabla? Creo que guardar la información de la sesión en la base de datos solo ayuda a reducir el uso de la memoria de los servidores web (RAM). ¿Alguien puede explicar en qué sentido mejora la seguridad?

No mejora la seguridad de ninguna manera.

El patrón más común y razonable para almacenar sesiones en la base de datos es cuando tiene varios servidores frontend, por lo que necesita un almacenamiento de sesión compartida para ellos.

Para downvoters: un archivo en el sistema de archivos no es menos seguro que un registro en la base de datos.

La idea es que las sesiones no puedan ser secuestradas.

Una ID de sesión se almacena en una cookie. Si un hacker puede robar esa identificación, puede pretender ser otra persona, porque una sesión se identifica por … es una identificación.

Al guardar la ID de sesión, IP y agente del servidor (su base de datos, por ejemplo), puede comparar los datos guardados en la base de datos con el cliente. Si un pirata informático roba la identificación de sesión de alguien, es posible que el pirata informático no tenga una IP o un agente de usuario que coincidan, lo que hace que los usuarios no coincidan, lo que le permite mostrar u ocultar cierto contenido.

Sin embargo, tienes que comparar los datos manualmente.

Un paso en falso de seguridad común con sesiones basadas en archivos es almacenarlos en /tmp u otro directorio compartido donde los datos puedan ser accesibles para terceros; especialmente en hosts compartidos esto puede ser un problema. Sin embargo, esto se puede evitar con los permisos de archivo adecuados.

Almacenarlos en una base de datos significa que tiene todas las restricciones de acceso de la base de datos en su lugar, aunque eso también significa que necesita configurarlos correctamente y configurar el almacenamiento físico de la base de datos de forma segura.

Mejora el rendimiento en la medida en que el servidor de la base de datos tiene más capas para mejorar el rendimiento a través del almacenamiento en memoria caché y en memoria, mientras que las sesiones basadas en archivos siempre incurren en un acceso al disco. El acceso concurrente puede mejorarse ya que puede elegir otros mecanismos de concurrencia distintos al locking de archivos. Sin embargo, si su servidor de base de datos ya está ocupado con el trabajo de la base de datos habitual, puede ser una buena idea, además, manejar la sesión.

Esto es para responder: ¿puedo guardarlos en la base de datos y utilizarlos en el progtwig?

Sí, puede guardarlos en la base de datos, pero no es necesario crear una columna separada para eso. Va a la columna userdata.

Puede establecer el nombre de usuario con $this->session->set_userdata('sessionname',session value);

Puede recuperarlo con $var=$this->session->userdata('sessionname');

  • La aplicación debe poder ejecutarse en varios servidores sin la afinidad del servidor (métodos que dirigen las solicitudes del mismo cliente al mismo servidor). Una manera fácil de asegurarse de que las sesiones continúen funcionando correctamente es almacenar las sesiones en una base de datos central que es común a todos los servidores.

  • La aplicación debe poder ejecutarse en un host compartido, donde existen importantes problemas de seguridad asociados con el almacenamiento de datos de sesión en el sistema de archivos.

  • Las necesidades de rendimiento de la aplicación son muy exigentes y requieren una solución de almacenamiento más sofisticada para los datos de la sesión. Existen muchas ideas y metodologías existentes que abordan los problemas de rendimiento de la base de datos, y pueden utilizarse cuando las sesiones se almacenan en una base de datos.

No mencionas si usas PHP o MYSQL, pero guardar tu sesión en una base de datos no te proporciona un mejor rendimiento, de hecho todo lo contrario.

La sesión predeterminada basada en archivos en PHP es mucho más rápida que recuperar valores de sesión de la base de datos, sin embargo, no notará la diferencia hasta que esté procesando miles de consultas por segundo.