2010-01-05 31 views
43

soy relativamente nuevo en CodeIgniter y estoy haciendo mi primer proyecto de CI en la cual hay usuarios-cuentas, etc. En el pasado, siempre he utilizado la variable $ _SESSION de PHP para este fin. Sin embargo, CI parece tener su propio mecanismo de la sesión, que afirma que es "mejor"sesiones CodeIgniter vs sesiones de PHP

mecanismo de la sesión de CI parece almacenar todos los datos en una cookie? Personalmente me gusta la idea de que todos los datos estén almacenados en el servidor, a los que se accede con una cookie-key como el mecanismo de sesión nativo de PHP ... ¿Soy tonto pensando que es mejor? ¿Debería simplemente aceptar el mecanismo de CI? ¿O debería seguir adelante y usar sesiones PHP nativas?

¿Qué hacen chicos?

Gracias,
Mala

Respuesta

34

En mi experiencia con CI que he encontrado algunas anomalías con sus sesiones, pero para la mayor parte del día a día las necesidades de la la biblioteca es buena y fácil de trabajar. Como se señaló, Flashdata es una característica muy agradable.

Si usted decide quedarse con sesiones de CI, me gustaría sugerir fuertemente para almacenar las sesiones en una base de datos y, además, cifrar las cookies:

estructura
$config['sess_encrypt_cookie'] = TRUE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'sessions'; 

La base de datos debe ser el siguiente:

CREATE TABLE IF NOT EXISTS `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) 
); 
+1

Las sesiones en la base de datos son su mejor apuesta para una seguridad óptima con codeigniter. –

+9

Gracias. Después de investigar más, descubrí que uno debería eliminar el guión bajo del nombre de la cookie de la sesión, ya que esto hace que IE se ahogue. – Mala

+0

@Mala: ¿Qué significa "choke"? ¿Dónde leíste sobre este problema de nombres de cookies de IE? Sé que hay un error relacionado con los guiones bajos en el dominio del sitio web [link] (http://www.enhanceie.com/ie/bugs.asp), pero ese es un problema diferente. –

8

El manual dice más flexibilidad en lugar demejor ;-)

supongo que el principal beneficio de la clase de sesión CodeIgnite es que se integra con el marco y ofrece algunas funciones adicionales, como el seguimiento de direcciones IP y lo que llama flashdata (datos de sesión que se borran tan pronto como se leen). Si está utilizando un marco en primer lugar, eso significa que estas opciones pueden ser atractivas para usted.

Lo que sea, también puede guardar datos de sesión en una base de datos:

http://codeigniter.com/user_guide/libraries/sessions.html

4

Mantenga la sesión de PHP para obtener información importante y use la sesión de CI para obtener información menos importante.

leer aquí wyh. http://codeigniter.com/forums/viewthread/130577/

+0

El consenso general de ese hilo es que las sesiones de CI _tienen información importante (cifrado/almacenamiento de base de datos), pero no son compatibles con Internet Explorer. – NobleUplift

+2

En realidad, recupero esa parte sobre Internet Explorer. Aparentemente esa información está siendo propagada por un teórico de la conspiración. – NobleUplift

1

Sé que este es un mensaje de más edad, pero creo que vale la pena compartir lo que he encontrado.

Desde IC utiliza un enfoque basado en cookies (incluso con el almacenamiento de base de datos) que causa un problema para mi aplicación particular que sirve de datos a los clientes remotos que solicitan datos a través de rizo. El resultado final es Cookies y Cross Site Scripting, aunque manejables, no funcionan bien juntos.

me eligieron para tratar de sustituir la clase de session.php nativa proporcionada por IC con mi propia MY_Session.php. Me alegré al descubrir que esto no era demasiado difícil, pero me sorprendió descubrir que CI estaba regenerando la identificación de la sesión a pesar de que mi script los proporcionaba explícitamente.

De acuerdo con el manual de CI

ID de sesión único del usuario (esto es una cadena estadísticamente aleatoria con entropía muy fuerte, hash con MD5 para la portabilidad, y regenerada (por defecto) cada cinco minutos)

Aunque es probable que pueda encontrar una manera de anular este, me pregunto si no sería mucho más fácil para volver a las sesiones de PHP.

Solo algo de reflexión si va a utilizar CI.

1

sesiones CI tiene limitaciones de tamaño de almacenamiento

Como saben, las sesiones de CI son básicamente las cookies, si usted cifrar o no. En lo que respecta a la seguridad, ambos tienen sus ventajas y desventajas.

Mi preocupación era el límite de tamaño de sesiones CI, Tiene una capacidad de sólo 4 KB de datos como su básicamente una cookie, mientras que la sesión de PHP nativo sólo almacena la ID de referencia en la galleta y todos los datos de sesión se almacenan en la memoria del servidor. Esto es útil cuando tiene que almacenar una gran cantidad de elementos en una sesión.

dicen que un carrito de la compra más artículos, o una lista de reproducción usuario con más de 50 pistas ... etc

Espero que esta información ayude a alguien algún día.

Cheers .. !!