Ver Mensaje Individual
  #6 (permalink)  
Antiguo 15/02/2010, 07:20
Nisrokh
 
Fecha de Ingreso: septiembre-2009
Ubicación: Neuquén
Mensajes: 142
Antigüedad: 14 años, 6 meses
Puntos: 12
Respuesta: [APORTE] Sistema de Sesiones y Autentificación de usuario con MySQL

Otras cosas que deben saber es que al autentificar un usuario, se guardan los siguientes datos en la sesion:

Código PHP:
Ver original
  1. <?php
  2.  
  3. // ID del la cuenta
  4. $_SESSION['account_id'];
  5.  
  6. // Nombre de la cuenta
  7. $_SESSION['account_name'];
  8.  
  9. // Tipo de la cuenta
  10. // En mi caso lo utilize asi:
  11. // 0 => Administrador, 1 => Moderador, 2 o mas => Usuario normal
  12. // Pueden cambiar o sacar esto cambiando la tabla _users y modificando
  13. // el metodo SimpleSession::login() y eliminando/cambiando la constante:
  14. // LOGIN_ACCESS_ERROR_UNAUTHORIZED_ACCOUNT
  15. $_SESSION['account_type'];
  16.  
  17. // Al estar logueado esto queda como true, pero ojo...
  18. // Al checkear si alguien esta logueado con SimpleSession::logged_in()
  19. // Se fija si existe el nombre usuario ($_SESSION['account_name'])
  20. // Sino existe o esta vacio, se cierra la session del usuario
  21. // eliminando todas las variables mencionadas aqui, incluso esta misma
  22. $_SESSION['access'];
  23.  
  24. ?>

Nota: Para determinar si el usuario esta logueado, se comprueba que:

* $_SESSION['account_name'] exista y no este vacia
* $_SESSION['access'] que como booleano siempre de true

¡Si les parece inseguro sugieran otro metodo para mejorarlo!

Al intentar un usuario loguearse, login se encarga de setear los errores utilizando las constantes definidas en SimpleSession.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. define('LOGIN_ACCESS_NO_ATTEMPT', -1); // Solo para una referencia de que no se intento loguear...
  4. define('LOGIN_ACCESS_GRANTED', 0); // Usuario se logue correctamente (no hay error)
  5.  
  6. // Error de login: contraseña incorrecta
  7. define('LOGIN_ACCESS_ERROR_ATTEMPT_FAILED', 1);
  8.  
  9. // Error de login: cuenta inexistente
  10. define('LOGIN_ACCESS_ERROR_NONEXISTENT_ACCOUNT', 2);
  11.  
  12. // Error de login: cuenta no autorizada
  13. // Deben modificar el metodo SimpleLogin::login() y cambiar la parte en q solo deja entrar
  14. // a usuarios con account_type = 0 || 1
  15. // Ya que en mi caso solo keria dejar entrar admins y mods
  16. // Si tienen dudas pregunten
  17. define('LOGIN_ACCESS_ERROR_UNAUTHORIZED_ACCOUNT', 3);
  18.  
  19. // Error de login: cuenta sin validar
  20. // De nuevo: modifiquen si kieren, el metodo SimpleLogin::login()
  21. // Ya que solo deja entrar a usuarios validados
  22. // con account_status = 1 (validado) || 0 (sin validar)
  23. define('LOGIN_ACCESS_ERROR_UNVALIDATED_ACCOUNT', 4);
  24.  
  25. // Error de login: cuenta bloqueada
  26. // cuando account_status < 0
  27. define('LOGIN_ACCESS_ERROR_BLOCKED_ACCOUNT', 5);
  28.  
  29. // Error de login: no se ingreso usuario en el form
  30. define('LOGIN_ACCESS_ERROR_MISSING_USERNAME', 6);
  31.  
  32. // Error de login: no se ingreso clave en el form
  33. define('LOGIN_ACCESS_ERROR_MISSING_PASSWORD', 7);
  34.  
  35. ?>

Si el logueo falla, podemos imprimir los errores de una menera muy simple, de acorde a los errores dados en las constantes:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $SimpleSession = new SimpleSession($MySQL);
  4. $SimpleSession ->start();
  5. $SimpleSession->login('test', 'test');
  6.  
  7. $_SESSION_ERROR = array(
  8.     1 => 'La contraseña no coincide con el nombre de usuario ingresado.',
  9.     2 => 'El nombre de usuario ingresado es inexistente.',
  10.     3 => 'La cuenta con la que usted está tratando de ingresar, no está autorizada para acceder al área de administración.',
  11.     4 => 'La cuenta con la que usted está tratando de ingresar, aún no ha sido validada. <br />Si usted es el dueño de esta cuenta, puede validarla haciendo clic <a href="#" class="blue">aquí</a>.',
  12.     5 => 'La cuenta con la que usted está tratando de ingresar ha sido bloqueada por un administrador.',
  13.     6 => 'No ha ingresado su nombre de usuario.',
  14.     7 => 'No ha ingresado su contraseña.',
  15.     8 => 'Se ha producido un error interno desconocido. Por favor, intente más tarde.'
  16. );
  17.  
  18. // Si hay un error lo imprimimos
  19. if ($SimpleSession->status > 0) {
  20.     print '<p>' .$_SESSION_ERROR[$SimpleSession->status]. '</p>';
  21. }
  22.  
  23. ?>

Y por último... Al utilizar el metodo SimpleLogin::logout() se destruyen TODAS las variables de la sesion... Si desean mantener datos aun despues de que un usuario cierre sesion, cambian el metodo SimpleLogin::logout() para que solo destruya las variables de las que hablamos anteriormente:

Código PHP:
Ver original
  1. $_SESSION['account_id'];
  2. $_SESSION['account_name'];
  3. $_SESSION['account_type'];
  4. $_SESSION['access'];

Si tienen dudas, ya saben... ¡Pregunten!

Última edición por Nisrokh; 15/02/2010 a las 12:27