working not manejo example ejemplo array php session authentication codeigniter cookies

php - not - ¿Cómo crear una casilla de verificación "recordarme" usando la biblioteca de sesión de Codeigniter?



session codeigniter 2 (6)

en Codeigniter estoy construyendo un sistema de autenticación para mi sitio web y para lograrlo utilizo la biblioteca de sesiones

session->set_userdata(''username'')

esto salvará la sesión -creo- por algún tiempo

Quiero proporcionar una casilla de verificación "recordarme" en el formulario de inicio de sesión para que el usuario pueda guardar la sesión para siempre, ¿no pudo encontrar la manera de guardar la sesión para siempre?

Nota: $ sess_expiration no funcionará porque establece la fecha de vencimiento para todos los usuarios y lo que quiero hacer es establecer la fecha de vencimiento según sus preferencias

¿es eso posible? ¿Y, cómo hacerlo?

Gracias


Necesitaba lo mismo. No puede lograr esto usando la configuración de CI así que he elegido anular el método setcookie de la clase de sesión de CI (en MY_Session):

function _set_cookie($cookie_data = NULL) { if (is_null($cookie_data)) { $cookie_data = $this->userdata; } // Serialize the userdata for the cookie $cookie_data = $this->_serialize($cookie_data); if ($this->sess_encrypt_cookie == TRUE) { $cookie_data = $this->CI->encrypt->encode($cookie_data); } else { // if encryption is not used, we provide an md5 hash to prevent userside tampering $cookie_data = $cookie_data.md5($cookie_data.$this->encryption_key); } setcookie( $this->sess_cookie_name, $cookie_data, $this->userdata(''rememberme'') == true ? $this->sess_expiration + time() : 0, $this->cookie_path, $this->cookie_domain, 0 ); }

Por supuesto, debe establecer el indicador de recuerdo en su sesión según la elección que haya hecho el usuario.


Puede establecer sess_expiration en 0 y luego establecer una variable personalizada en la sesión como, remember_me = 1. Verifique este valor y destruya la sesión si es necesario después de un tiempo. Esto sería un workarround.


Puede usar isset para verificar si la cookie tiene un valor, y si la cookie se elimina, devolverá negativo. Si es negativo, puede volver a configurar la cookie ... por supuesto, esto será como "renovar" la cookie, por lo que si el usuario no vence, se olvidará. (Establecer un tiempo muy grande hasta la expiración!)

Por ejemplo:

<?php if (isset($_COOKIE[''autologin''])) { //Checks for cookie echo "Welcome back!... Logging you in."; }else{ //Sets a cookie echo "Please sign in"; $expiretime=time()+60*60*24*365; //set expire time to a year setcookie("autologin", "What is here is not important.", $expiretime); }; ?>


Si la casilla de verificación recordarme está marcada, configura una cookie en el sistema del usuario con una cadena aleatoria. P.ej:

$cookie = array( ''name'' => ''remember_me_token'', ''value'' => ''Random string'', ''expire'' => ''1209600'', // Two weeks ''domain'' => ''.your_domain.com'', ''path'' => ''/'' ); set_cookie($cookie);

También guarda esta cadena aleatoria en la tabla de users , por ejemplo, en la columna remember_me_token .

Ahora, cuando un usuario (que aún no ha iniciado sesión) intenta acceder a una página que requiere autenticación:

  • comprueba si hay una cookie con el nombre de remember_me token en su sistema
  • si está allí, verifica la base de datos si hay un registro con el mismo valor
  • si es así, recreas la sesión de este usuario (esto significa que están conectados)
  • mostrar la página que estaban visitando

Si uno de los requisitos anteriores no se cumple, los redirige a la página de inicio de sesión.

Por razones de seguridad, es posible que desee renovar el random_memo_me_token al azar cada vez que el usuario inicie sesión. También puede actualizar la fecha de caducidad de la cookie cada vez que el usuario inicie sesión. De esta forma, permanecerá conectado.

Sería demasiado trabajo escribir todo el código para usted, pero espero que esto le ayude a implementar esta funcionalidad usted mismo. Por favor comente si tiene alguna pregunta. Buena suerte.


Usé ganchos para hacer esto

  1. Habilite los ganchos en la configuración "config.php" $config[''enable_hooks''] = TRUE;

  2. En su controlador de inicio de sesión, guarde el valor de la casilla de verificación en la sesión

    $this->session->set_userdata(''remember_me'', $this->input->post(''remember_me''));

  3. En su archivo "hooks.php" , agregue esto

    $hook[''post_controller_constructor''] = array( ''class'' => ''Change_Config'', ''function'' => ''change_session_expiration'', ''filename'' => ''change_config.php'', ''filepath'' => ''hooks'' );

  4. En su carpeta "ganchos", cree un archivo llamado "change_config.php" y pegue este

    <?php class Change_Config { public function change_session_expiration() { $ci = & get_instance(); $remember = $ci->session->userdata(''remember_me''); if($remember && $ci->session->sess_expire_on_close) { $new_expiration = (60*60*24*365); //A year milliseconds $ci->config->set_item(''sess_expiration'', $new_expiration); $ci->config->set_item(''sess_expire_on_close'', FALSE); $ci->session->sess_expiration = $new_expiration; $ci->session->sess_expire_on_close = FALSE; } } }


$this->session->sess_expiration = ''14400''; // expires in 4 hours $this->session->set_userdata($data); // set session