Pregunta

¿Cómo implementas esto en CodeIgniter?

¿Fue útil?

Solución

(Esta respuesta fue una respuesta a la pregunta original)

  

¿Cómo harías esto? O como lo haria   creas una sesión con un largo   ¿Fecha de vencimiento que los demás?

     

Todas las sesiones creadas usarían el   misma $ config ['sess_expiration'] en el   archivo de configuración (por defecto: 7200 segundos),   hay una manera de pasar un valor personalizado   ?

La extensión de la expiración de una cookie de sesión no va a funcionar para un " recordar mi " característica, ya que el usuario perderá su cookie de sesión cuando cierre el navegador. Si Code Igniter no tiene una función de " recordar " ;, entonces tendrá que escribir algo para eliminar una cookie de larga duración que contiene información que permitirá un inicio de sesión automático cuando el servidor la vuelva a ver.

Hay un buen artículo en Práctica recomendada de Cookie de inicio de sesión persistente , que puede resumirse como:

  
      
  1. Cuando el usuario inicia sesión correctamente con Recordarme, un inicio de sesión   cookie se emite además de la   cookie de gestión de sesión estándar. 2
  2.   
  3. La cookie de inicio de sesión contiene el nombre de usuario del usuario y un número aleatorio.   (el " token " a partir de aquí) desde un   espacio adecuadamente grande. El nombre de usuario y   token se almacenan como un par en una   tabla de base de datos.
  4.   
  5. Cuando un usuario que no ha iniciado sesión visita el sitio y presenta una cookie de inicio de sesión,   el nombre de usuario y el token son buscados   en la base de datos        1. Si el par está presente, el usuario se considera autenticado.   El token usado se elimina de la   base de datos. Se genera un nuevo token,   almacenado en la base de datos con el nombre de usuario,   y emitido al usuario a través de un nuevo inicio de sesión.   Galleta.        2. Si el par no está presente, la cookie de inicio de sesión se ignora.
  6.   
  7. Los usuarios que solo se autentican a través de este mecanismo son   no permitido acceder a ciertos   información protegida o funciones   como cambiar una contraseña, ver   información de identificación personal, o   gastando dinero. Para realizar esos   operaciones, el usuario debe primero   enviar correctamente un normal   formulario de inicio de sesión de usuario / contraseña.
  8.   
  9. Dado que este enfoque permite al usuario tener múltiples recordados   inicios de sesión desde diferentes navegadores o   computadoras, se proporciona un mecanismo para   El usuario borrará todos los recordados.   inicia sesión en una sola operación.
  10.   

Otro artículo que incorpora más seguridad a esas ideas en Mejoras en el inicio de sesión persistente Mejores prácticas recomendadas

Si sigues las prácticas de esos artículos, ¡no te equivocarás!

Otros consejos

Es posible que desee reconsiderar la sugerencia de "Mejores prácticas recomendadas de cookies de inicio de sesión persistentes". He publicado mi análisis del problema en el sitio, pero la esencia de esto es:

  

No puede evitar el robo de cookies sin una línea segura, no importa qué

(* Por 'línea segura', me refiero a la tunelización SSL / VPN / el cifrado de clave pública, o un esquema sólido de desafío-respuesta *)

Lo único que hago para las mejores prácticas de inicio de sesión persistentes, pero hay un punto en el que ninguna cantidad de trucos ayudará, y donde la forma solo es SSL.

Gracias por la solución. He implementado esto en mi proyecto de CI.

DEV Nota: la cookie debe tener un hash seguro como clave de recordatorio. - no se limite a almacenar una identificación de usuario) - no almacenar una contraseña, - y no almacenar hash de contraseña. De esa manera, las personas no pueden iniciar sesión automáticamente en ninguna cuenta.

En el peor de los casos: en cuanto un pirata informático descubre el método hash, puede ajustar la función del productor de claves en un lugar y volver a configurarlo con seguridad. Simplemente ajustaría las cuerdas de sal y pimienta.

Espero que ayude. Chris D. - de Australia :)

Para estas cosas, se puede acceder a las variables de CI en todas las clases en su propia biblioteca:

Por ejemplo:

$this->session->sess_expiration = 500000;

Espero que eso resuelva tu problema.

hay una biblioteca en github para recordar que lo descargué.

Al usar la función setCookie () de esta biblioteca, ocurre lo siguiente:

1.Se genera una cookie que contiene un número único Este número se registra en una tabla de base de datos, llamada ci_cookies junto con el nombre de usuario / netid que se pasa a setCookie ()

2. Cuando la función verifyCookie () se denomina hash de cookie del navegador debe coincidir con el hash registrado en la base de datos. Si lo hace, verifyCookie () devuelve true reenviarlo en la página de inicio

U necesita configurar conf antes de cargar sesión

$do_not_remember = (boolean) $this->input->post('do_not_remember');
if ($do_not_remember) {
   $this->config->set_item('sess_expiration', 0);
   $this->config->set_item('sess_expire_on_close', true);
}
$this->load->library('session');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top