Ver Mensaje Individual
  #6 (permalink)  
Antiguo 22/01/2012, 11:57
Avatar de carlos_belisario
carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 8 meses
Puntos: 461
Respuesta: [APORTE] Clase inicio sesion para cualquier pagina con mysql

acá el invento que hice ,
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  *
  4.  * clase para gestionar Usuarios
  5.  * @author Carlos Belisario <carlosbelisario.com>
  6.  * @version 1.0
  7.  *
  8.  */
  9. class Usuarios
  10. {
  11.     /**
  12.      *
  13.      * @var String $usuario
  14.      */
  15.     private $usuario;
  16.    
  17.     /**
  18.      *
  19.      * @var String $password
  20.      */
  21.     private $password;
  22.    
  23.     /**
  24.      *
  25.      * @var String $rol
  26.      */
  27.     private $rol;
  28.    
  29.     /**
  30.      *
  31.      * @var String $estatus
  32.      */
  33.     private $estatus;
  34.    
  35.     /**
  36.      *
  37.      * @var String $securitySalt
  38.      */
  39.     private $securitySalt;
  40.    
  41.     /**
  42.      *
  43.      * @var PDO
  44.      */
  45.     private $db;
  46.    
  47.     /**
  48.      *
  49.      * @var String $error
  50.      */
  51.     private $error;
  52.  
  53.  
  54.     /**
  55.      *
  56.      * @param PDO $db
  57.      */
  58.    
  59.     public function __construct(PDO $db)
  60.     {
  61.         $this->db = $db;
  62.     }
  63.  
  64.         /**
  65.      *
  66.      * Getter and Setter
  67.      */
  68.     public function getUsuario()
  69.     {
  70.         return $this->usuario;
  71.     }
  72.    
  73.     public function setUsuario($usuario)
  74.     {
  75.         $this->usuario = $usuario;
  76.     }
  77.    
  78.     public function getPassword()
  79.     {
  80.         return $this->password;
  81.     }
  82.    
  83.     public function setPassword($password, $salt = true)
  84.     {
  85.         if($salt)
  86.             $this->password = md5($this->getUsuario().$password.$this->getSecuritySalt());
  87.         else
  88.             $this->password = md5($this->getUsuario().$password);
  89.     }
  90.    
  91.     public function getSecuritySalt()
  92.     {
  93.         return $this->securitySalt;
  94.     }
  95.    
  96.     public function setSecuritySalt($securitySalt = 'heyntonwgrnkmoamju33mdowm')
  97.     {
  98.         $this->securitySalt = $securitySalt;
  99.     }
  100.    
  101.     public function getRol()
  102.     {
  103.         return $this->rol;
  104.     }
  105.    
  106.     public function setRol($rol)
  107.     {
  108.         $this->rol = $rol;
  109.     }
  110.    
  111.     public function getEstatus()
  112.     {
  113.         return $this->estatus;
  114.     }
  115.    
  116.     public function setEstatus($estatus)
  117.     {
  118.         $this->estatus = $estatus;        
  119.     }
  120.    
  121.     public function getError()
  122.     {
  123.         return $this->error;
  124.     }
  125.  
  126.     public function setError($k, $error)
  127.     {
  128.         $this->error[$k] = $error;
  129.     }
  130.     /**
  131.      *
  132.      * @method login
  133.      * metodo para autnetificar al usuario
  134.      *
  135.      */
  136.     public function login()
  137.     {
  138.         // aca verificamos que el usuario haya escrito en un formato que comience con letras y pueda estar seguido de un punto, guion bajo o guion
  139.         if(preg_match("/(^[a-z]{1,20})(?!\s)([\w-\.]{0,20}$)/i",  $this->getUsuario())){
  140.             $sql = "SELECT * FROM usuarios WHERE usuario = :usuario AND password = :password";
  141.             try {
  142.                 // hacemos la consulta
  143.                 $query = $this->db->prepare($sql);            
  144.                 $query->bindParam(':usuario', $this->getUsuario());
  145.                 $query->bindParam(':password', $this->getPassword());
  146.                 $query->execute();
  147.                 $row = $query->fetchObject();
  148.                 //verificamos que el usuario exista en la base de datos y la password sea correcta
  149.                 if(!empty($row)) {                                                                                  
  150.                     $this->setRol($row->rol);
  151.                     /*podemos pasar el estatus para que se haga la verificacion
  152.                     * e ingrese a una pagina para usuarios deshabilitados,
  153.                     * para darle motivos e incluso donde comunicarse,
  154.                     *                            
  155.                     */                        
  156.                     $this->setEstatus($row->estatus);
  157.                        
  158.                     /* o podemos incluirlo en los errores, de manera que no haga login
  159.                     if($row->estatus == "habilitado") {
  160.                         $this->setRol($row->rol);                                                                
  161.                     } else {
  162.                         $this->setError ('userEstatus', 'El Usuario no esta habilitado');
  163.                     }*/                          
  164.                    
  165.                 } else {
  166.                     $this->setError('errorLogin', 'El Usuario o la Contraseña no es Correcta');
  167.                 }    
  168.            
  169.              } catch( PDOException $e) {
  170.                  $e->getMessage();
  171.              }                    
  172.         } else {
  173.             $this->setError('erroFormato', 'Formato de usuario no permitido');
  174.         }  
  175.     }
  176. }
  177.  
  178. /**
  179. * como usar
  180. */
  181. try {
  182. //establecemos la conexion con PDO
  183.     $db = new PDO('mysql:host=localhost; dbname=prueba', 'root', '123');  
  184. } catch(PDOException $e) {
  185.    echo $e->getMessage();
  186. }
  187. //instanciamos la clase y probamos el login
  188. $class = new Usuarios($db);
  189. //los parámetros estan siendo pasado un login por defecto se puede obtener desde un formulario con $_POST O $_GET
  190. $class->setUsuario('carlos');
  191. $class->setPassword('123456');
  192. //indicamos que realice el login
  193. $class->login();
  194. //sino existe algn error
  195. if(count($class->getError()) == 0) {
  196.     //realizamos los procesos con las variables de session o incluso si se desea se puede crear un componente de session y le pasamos nuestro objeto usuario con el login correcto
  197. } else {
  198. // gestionamos los mensajes de errores para los usuarios
  199.     echo "<pre>";
  200.     print_r($class->getError());
  201.     echo "</pre>";
  202. }
  203. ?>
es mas como dijo gildus una gestión de usuarios ya que el login es solo una accion que realizan los mismo, no hice la vista solo la lógica del login, todavía me falta crear la gestión de lo que es el CRUD, pero lo hice ahorita porque tenía un tiempo libre, espero que les pueda servir y que las critiquen, si hay dudas, me dicen o mejoras mucho mejor, por cierto por fin me cree una cuenta pública de github pueden descargar directamente de alla si quieren para hacer mejoras como lo deseen, eso si me las indican para ver yo también y aprender, saludos https://github.com/carlosbelisario/juegos_con_clases/
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way