Hola a todos, el dia de ayer me propuse hacer una clase para logueo, ya que en el proyecto que voy a realizar se requiere un autentificacion de diferentes tipos de usuarios, le di vueltas y hoy la termine, para quien quiera aplicarla la dejo, se aceptan criticas y comentarios
Conexion.class.php
Código:
<?php
class Conexion
{
private $cn;
private $rs;
private $servidor;
private $usuario;
private $password;
private $bd;
public function __construct($servidor = "localhost", $usuario = "root", $password =
"220785", $bd = "sce")
{
$this->servidor = $servidor;
$this->usuario = $usuario;
$this->password = $password;
$this->bd = $bd;
$this->cn = new mysqli($servidor, $usuario, $password, $bd);
}
public function dbExecute($query)
{
$this->rs = $this->cn->query($query);
return $this->rs;
}
public function getInsertedId()
{
return $this->cn->insert_id;
}
public function afectados()
{
return $this->cn->affected_rows;
}
protected function clean($value)
{
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
$value = mysql_real_escape_string(htmlspecialchars($value));
return $value;
}
public function __destruct()
{
$this->cn;
}
}
?>
Login.class.php
Código:
<?php
class Login extends Conexion
{
private $usuario;
private $password;
private $tipo_usuario;
private $nivel;
public function __construct()
{
parent::__construct();
parent::__destruct();
}
public function comprueba($usuario, $password, $tipo_usuario)
{
$this->usuario = $this->clean($usuario);
$this->password = $this->clean($password);
$this->tipo_usuario = $tipo_usuario;
//Comprueba el tipo de usuario
if ($tipo_usuario == "Alumno") {
$query = "SELECT id_alumno,password,status FROM alumnos WHERE id_alumno='$usuario' AND password='$password'";
} elseif ($tipo_usuario == "Empleado") {
$query = "SELECT id_empleado,password,nivel,status FROM empleados WHERE id_empleado='$usuario' AND password='$password'";
}
return $this->dbExecute($query);//Devuelve resultado de consulta
}
public function crear_sesion($tipo_usuario, $nivel, $usuario)
{
$this->tipo_usuario = $tipo_usuario;
$this->nivel = $nivel;
$this->usuario = $usuario;
session_start();
if ($tipo_usuario == "Alumno" && $nivel==0) {//Usuario alumno
session_register("autentificado");
$_SESSION["autentificado"] = "ALUMNO";//Variable de sesion que restringe el acceso
$_SESSION["alumno"] = $usuario;//Variable de sesion con el usuario
$_SESSION["acceso"] = date("Y-n-j H:i:s");//Variable de sesion del tiempo de inicio
} elseif ($tipo_usuario == "Empleado" && $nivel == 1) {//Verifica el empleado y su puesto, depende del nivel que se le de puede ser 1,2,3 ó los niveles que se quieran manejar
session_register("autentificado");
$_SESSION["autentificado"] = "ADMINISTRADOR";
$_SESSION["administrador"] = $usuario;
$_SESSION["acceso"] = date("Y-n-j H:i:s");
} elseif ($tipo_usuario == "Empleado" && $nivel == 2) {
session_register("autentificado");
$_SESSION["autentificado"] = "DOCENTE";
$_SESSION["docente"] = $usuario;
$_SESSION["acceso"] = date("Y-n-j H:i:s");
}
}
private function imprime($tipo_usuario, $nivel)//Imprime las variable de sesion del usuario
{
$this->tipo_usuario = $tipo_usuario;
$this->nivel = $nivel;
session_start();
session_register('autentificado');
if ($tipo_usuario == "Alumno" && $nivel==0) {
$sesion = $_SESSION["alumno"];
return $sesion;
} elseif ($tipo_usuario == "Empleado" && $nivel == 1) {
$sesion = $_SESSION["administrador"];
return $sesion;
} elseif ($tipo_usuario == "Empleado" && $nivel == 2) {
$sesion = $_SESSION["docente"];
return $sesion;
}
}
public function proteger_administrador()//Protege la parte del administrador
{
session_start();
if ($_SESSION["autentificado"] == "ADMINISTRADOR") {//Verifica que la sesion este creada
return $this->imprime("Empleado", 1);
} else {
header("Location: index.php");
}
}
public function proteger_docente()//Protege la parte del docente
{
session_start();
if ($_SESSION["autentificado"] == "DOCENTE") {
return $this->imprime("Empleado", 2);//Imprime las variables de sesion
} else {
header("Location: index.php");
}
}
public function proteger_alumno()//Protege la parte del docente
{
session_start();
if ($_SESSION["autentificado"] == "ALUMNO") {
return $this->imprime("alumno", 0);//Imprime las variables de sesion
} else {
header("Location: index.php");
}
}
public function cerrar_sesion_inactiva()//Cierra la sesion si el usuario esta inactivo
{
$fechaGuardada = $_SESSION["acceso"];//Variable de sesion del tiempo transcurrido
$ahora = date("Y-n-j H:i:s");//Variable que captura el tiempo actual
$tiempo_transcurrido = (strtotime($ahora) - strtotime($fechaGuardada));//Se compara el ultimo tiempo de la sesion del tiempo y la compara con la variable del tiempo transcurrido
if ($tiempo_transcurrido > 900) {//Tiempo de vida de la sesion
session_destroy();
} else {
$_SESSION["acceso"] = $ahora;//Refresca la variable de sesion del tiempo
}
}
public function cerrar_session()//Cierra la sesion
{
session_start();
$_SESSION = array();
session_destroy();
header("Location: index.php");
}
}
?>
Yo la aplique de la se siguiente manera
index.php
Código:
<form name="forma" method="post" action="index1.php">
<table>
<tr>
<td class="titulos">Tipo de Usuario</td>
<td>
<select name="tipo_usuario" style="width: auto;">
<option value="1">Selecciona</option>
<option value="Empleado">Empleado</option>
<option value="Alumno">Alumno</option>
</select>
</td>
</tr>
<tr>
<td class="titulos">Usuario</td>
<td><input type="text" name="usuario" id="usuario" maxlength="15" size="15" /></td>
</tr>
<tr>
<td class="titulos">Password</td>
<td><input type="password" name="password" id="password" maxlength="10" size="10" /></td>
</tr>
<tr class="titulos">
<td colspan="2"><input type="submit" name="Entrar" value="Entrar" class="btn btnadmin" /></td>
</tr>
</table>
</form>
index1.php
Código:
<?php
include ("clases/Cargar_clases.php");
$tipo_usuario = $_POST["tipo_usuario"];
$usuario = $_POST["usuario"];
$password = $_POST["password"];
$login = new Login();
$rs = $login->comprueba($usuario, $password, $tipo_usuario);
$row = $rs->fetch_assoc();
if ($tipo_usuario == "Empleado") {
$usuario1 = $row["id_empleado"];
$password1 = $row["password"];
$nivel = $row["nivel"];
$status=$row["status"];
if ($usuario == $usuario1 && $password == $password1 && $nivel == 1 && $status==1) {//Verifica que el usuario sea el administrador
$login->crear_sesion($tipo_usuario, $nivel, $usuario);
header("Location: administrador.php");
} elseif ($usuario == $usuario1 && $password == $password1 && $nivel == 2 && $status==1) {//verifica que el usuario sea el docente
$login->crear_sesion($tipo_usuario, $nivel, $usuario);
header("Location: docente.php");
} else {
header("Location: index.php");
}
}elseif($tipo_usuario=="Alumno"){
$usuario1 = $row["id_alumno"];
$password1 = $row["password"];
$nivel = 0;
$status=$row["status"];
if ($usuario == $usuario1 && $password == $password1 && $nivel == 0 && $status==1) {//Verifica que el usuario sea el alumno
$login->crear_sesion($tipo_usuario, $nivel, $usuario);
header("Location: alumno.php");
} else {
header("Location: index.php");
}
} else {
header("Location: index.php");
}
?>
Proteccion de las pagina por niveles
administrador.php
Código:
<?php
include("clases/Cargar_clases.php");
$login=new Login();
$login->proteger_administrador();
$login->cerrar_sesion_inactiva();
?>
docente.php
Código:
<?php
include("clases/Cargar_clases.php");
$login=new Login();
$login->proteger_docente();
$login->cerrar_sesion_inactiva();
?>
alumno.php
Código:
<?php
include("clases/Cargar_clases.php");
$login=new Login();
$login->proteger_alumno();
$login->cerrar_sesion_inactiva();
?>
BD
Código PHP:
CREATE TABLE `alumnos` (
`id_alumno` varchar(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
`status`int(1) NOT NULL,
`password` varchar(10) NOT NULL,
PRIMARY KEY (`id_alumno`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `empleados` (
`id_empleado` varchar(15) NOT NULL,
`nombre` varchar(30) NOT NULL,
`status`int(1) NOT NULL,
`password` varchar(10) NOT NULL,
`nivel` varchar(15) NOT NULL,
PRIMARY KEY (`id_empleado`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Espero que alguien le sirva