
Sistema de login con sesiones y mysqli
PHP
64.122 visualizaciones desde el 23 de Junio del 2016
Sistema de login por medio de sesiones que consulta el usuario y la contraseña en la base de datos por medio de mysqli
Archivo index.php con formulario:
<?php
if(isset($_GET["error"]) && $_GET["error"] != "login") {
header("Location: index.php");
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Título de la página</title>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="login">
<h1>Login</h1>
<?php
if(isset($_GET["error"])) {
echo "<p class='error'>Usuario y / o Contrasea erroneos. Intentelo de nuevo.</p>";
}
?>
<form action="login.php" method="post">
<div class="form-group">
<input type="text" class="form-control" name="usuario" placeholder="Usuario">
</div>
<div class="form-group">
<input type="password" class="form-control" name="password" placeholder="Password">
</div>
<button type="submit" name="enviar" class="btn btn-default">Entrar</button>
</form>
</div>
<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
</body>
</html>
Archivo conexion.php
<?php
$mysqli = new mysqli("localhost", "root", "", "pruebas");
if($mysqli->connect_errno) {
echo "<b>Fallo al conectar a la BD: </b>" . $mysqli->connect_errno . "---" . $mysqli->connect_error;
}
return $mysqli;
?>
Archivo login.php
<?php
if(isset($_POST["enviar"])) {
require("conexion.php");
$loginNombre = $_POST["usuario"];
$loginPassword = md5($_POST["password"]);
$consulta = "SELECT * FROM admin_user WHERE usuario='$loginNombre' AND password='$loginPassword'";
if($resultado = $mysqli->query($consulta)) {
while($row = $resultado->fetch_array()) {
$userok = $row["usuario"];
$passok = $row["password"];
}
$resultado->close();
}
$mysqli->close();
if(isset($loginNombre) && isset($loginPassword)) {
if($loginNombre == $userok && $loginPassword == $passok) {
session_start();
$_SESSION["logueado"] = TRUE;
header("Location: admin.php");
}
else {
Header("Location: index.php?error=login");
}
}
} else {
header("Location: index.php");
}
?>
Archivo admin ( accedes cuando ya te has logueado )
<?php
session_start();
if($_SESSION["logueado"] == TRUE) {
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Panel de administracion</title>
</head>
<body>
<h1>Página de administrador</h1>
<a href="nuevo_articulo.php">Nuevo artículo</a><br>
<a href="salir.php">Salir</a>
</body>
</html>
<?php
} else {
header("Location: index.php");
}
?>
Archivo salir.php el cual cierra la sesión
<?php
@session_start();
session_destroy();
header("Location: index.php");
?>
Comentarios sobre la versión: 1.0 (33)
en el ejemplo la tabla se llama
admin_user
con los campos
usuario del tipo varchar
y password del tipo varchar
He intentado seguirlo, pero no me funciona. David, falta un poco de explicación para que los novatos en este ámbito (como yo) sepamos como hacer servir esto...
conexion.php
index.php
login.php
admin.php
salir.php
en el ejemplo ya esta seccionado solo debes copiar el pedazo correspondiente y crear un archivo php
se copia desde
este seria el archivo salir.php
Ahora bien, en los campos con ids autor_id y post_id debera estar el id del usuario que comenta y el id del post al que le comentan.
Asumiendo que la variable $usuario_logeado_id contiene el id del usuario que va a comentar, el codigo HTML quedara asi
me tarde como 30 minutos resolviendolo
me di cuenta que la contraseña estaba cifrada
md5 cifra la contraseña
-------------------------aqui-------------------------------
entonces en la condicional
... la variable $passok la encripte de igual modo
y se la asigne a una nueva llamada $varr
/////////////////////////////////////////////////////////////////////////////////////////////////////////
y quedo asi
ESPERO te haya servido
el detalle es en el archivo login.php pasa que la contraseña esta encriptada con MD5
y nosotros la guardamos directamente a la base de datos hay de dos quitar la encriptacion md5 que no seria lo correcto
o crear un formulario para crear el usuario y contraseña encriptada de igual manera
$correo=mysql_real_escape_string( $_POST['correo']);
$clave=mysql_real_escape_string($_POST['clave']);
no tengo idea cual sea el error, solo dice usuario no registrado
Un ejemplo:
saludos a todos...
Tras copiar todo, comprobar que la conexion funciona, cuando realizo un login sea correto o erroneo siempre me da este error.
Localhost via UNIX socket
Warning: Cannot modify header information - headers already sent by (output started at .../conexion.php:1) in .../login.php on line 65
La linea 65 corresponde a este header:
}
else {
}
Saludos
1.- cuando ingreso user y pass, hice un ECHO para ver por que no me estaba funcionando el MD5 en .."md5($_POST["password"]);" y el resultado fue :
y el la BD el password (que esta ingresado con MD5) es "827ccb0eea8a706c4c34" y por esto mismo no valida correctamente el password.
(hice la prueba de sacar el MD5 del POST y en la BD ingrese la password sin MD5 y funciono perfectamente la validacion).
2.- Si no ingreso el user y pass y presiono ENTRAR, entra directamente a la pagina que se configura en "header("Location:...".
Gracias
Convertí la pass a MD5 y la guardé así en la BD y perfecto.
Ahora una duda que me surge, es que el explorador, al iniciar sesión, no pe da la opción de guardar la contraseña para no tener que escribirla de nuevo cada vez que quiera iniciar sesión.
Como podría añadir esa función?
en verdad sería mucho mejor saber como sacar la variable '$row["id"]' y llevarla a las siguientes páginas post logueo.
¿cómo podría lograr eso?
saludos, el ejemplo está buenísimo. funciona perfect.
Gracias y saludos