‘Recordarme’ Inicia sesión en CodeIgniter
-
05-07-2019 - |
Pregunta
¿Cómo implementas esto en CodeIgniter?
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:
- 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
- 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.
- 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.
- 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.
- 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.
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');