2011-06-04 12 views
5

He leído sobre cómo CI maneja las sesiones de forma diferente a las nativas y me siento un poco inseguro sobre el almacenamiento de todos los datos en una cookie (?), A diferencia de la sesión nativa de PHP que almacena ?). Así que decidí usar sesiones nativas sin la biblioteca CI_session_session.Uso de Isset con sesiones nativas en CodeIgniter

Ahora, sé que la clase de entrada en CI valida Isset con una verdadera falsa declaración/así:

if ($this->input->post('something')) 

que hace la función de Isset no puede trabajar (que da un error). Sin embargo, me gustaría verificar mis sesiones nativas con la función Isset, así que ¿cómo puedo hacer esto? He intentado

if (isset($_SESSION['keyHere']))

que me da un error.

Para resumir: Quiero usar Isset en mi arsenal de sesión como me siento usando

if ($_SESSION['keyHere'])

sin la Isset podría ser 'peligroso/tonta'.

Además, como última pregunta, tengo curiosidad acerca de qué manejo de sesiones cree que es más seguro. Clase de sesión de CI o manejo nativo de PHP con almacenamiento en el lado del servidor, etc. Me gustaría sentirme lo más seguro posible cuando se trata de sesiones, sin importar si eso significa que tendré que escribir un código más largo.

Respuesta

1

Yo usaría array_key_exists en lugar de isset. isset también comprueba si el valor no es nulo, por lo que una matriz con una clave existente pero con un valor nulo también devolverá falso. Usted sabe que es una matriz y desea verificar si existe una clave, por lo que tiene más sentido utilizar array_key_exists.

Pero ese no es el problema. : D

Creo que primero debe llamar al session_start().

El manejo de sesión nativo de PHP funciona bien siempre que se encuentre en un único servidor web.

0

Siempre he usado php functionempty(); aunque funciona de manera diferente si no sabes lo que estás haciendo.

  • Si se trata de una matriz vacía, se devolverá FALSE
  • Si es NULL, devolverá FALSO

personalmente me tenía pequeños problemas con el nuevo session class en IC 2.0.2. Cree una tabla llamada "sessions" y almacene las sesiones en la base de datos, utilizando sess_use_database en true. Establezca también sess_encrypt_cookies en verdadero y, por último, si desea que las sesiones coincidan con las IP de usuario, use sess_match_ip. Ah, y asegúrese de establecer la clave de cifrado, lo que lo hará aún más seguro.

Las sesiones de PHP son agradables, pero personalmente me gustan más las sesiones de CI porque ofrecen más flexibilidad. Especialmente cuando ejecuta múltiples cabezales web con equilibrador de carga.

Espero que ayude!

0

¿Por qué no utilizar el built in CodeIgniter Session Class? proporcionará la misma funcionalidad que la clase de entrada con respecto a no forzarle a usar isset().

Permite sesiones encriptadas y usa su propia implementación de sesión.

$this->session->userdata("keyHere"); // returns false if not set 
2

Bien, hablemos del problema que está teniendo con isset! acepto todas las respuestas, la función vacía es una buena opción, también utiliza array_key_exists, pero tiene un lugar propio en el lenguaje php.

Al principio no publicaste el error que recibes, pero como @GolezTrol dijo que estás teniendo problemas con session_start().

Debe colocarlo en la parte superior de la página, antes de cualquier secuencia de comandos. Me gustaría poner este código antes de todos los scripts, y el mejor lugar para ponerlo dentro de la página config/config.php, al comienzo de la misma, o tal vez en la raíz index.php

Al usarlo, se iniciará la sesión en todas las páginas de tu sistema. Bueno, sobre su segunda pregunta.

Creo que la sesión nativa de PHP es realmente segura, pero la sesión de Codeigniter también es muy agradable.

Codeigniter tiene algunos problemas con la seguridad, cuando hablamos de cookies, si manejamos con datos importantes del sistema, es difícil trabajar con él, especialmente si alguien más podría editarlo, pensando en todo lo que yo Describir arriba, podría decir que Codeigniter tiene una buena biblioteca de sesion, incluso si estamos trabajando con datos importantes.

Si no cree en la seguridad de las cookies, simplemente colóquelas en la base de datos, y tendrá cualquier problema con ellas. ¡Lo bueno es la capacidad y la facilidad para trabajar con esta clase en todos los lugares del sistema!

Actualmente estoy usando el camino de la base de datos, y lo sugiero.

0

Realmente debería usar la clase de sesión codeigniter. Puede hacer que almacene los datos de la sesión en el archivo db para que la cookie contenga solo un identificador único. También puede configurar esa cookie para que se cifre con la clave de seguridad codeigniter.

Luego, cuando accede a la información de la sesión, actúa como los métodos de entrada normales y puede hacer si ($ this-> session-> userdata ('nombre')) en lugar de usar isset o vacío o lo que sea.

1
$data=$this->session->userdata("session variable"); 

if($data) 
{ 
    // do something 
} 

utilice esto en sus archivos de código CI. ¡funciona para mí todo el tiempo!

1
$logindata = $this->session->userdata('username'); 

if ($logindata !== FALSE) 
{ 
    //it exists 
} 

puede ayudar!