¡Hola a todos y a todas! Comienzo este 2016 (un poco tarde, estaba descansando 🙂 ) con un tutorial donde mostraré cómo hacer un acceso y registro de usuarios básico basado en HTML, AJAX, PHP y MySQL.
En esta ocasión, utilizaremos y configuraremos cookies de sesión con PHP, y también comprobaremos si el usuario está logueado (si tiene la sesión iniciada) o no. Representado en un diagrama de flujo, sería algo así:
Entonces, comencemos.
¿Cómo crear un sistema de usuarios?
Como siempre digo, seguiré desarrollando en local, utilizando XAMPP (Apache y MySQL con PHPMyAdmin) en Windows.
1 de 3: MySQL
Lo primero que debemos hacer es estructurar nuestra base de datos.
Continúo trabajando sobre una base de datos llamada mmv con cotejamiento utf8_spanish_ci. Dentro tengo una tabla llamada mmv005 que tiene cuatro columnas. El motor de almacenamiento es InnoDB.
- id -> INT(5) -> A_I -> primaria
- username -> varchar(20) -> utf8_spanish_ci
- usernamelowercase -> varchar(20) -> utf8_spanish_ci -> único
- password -> varchar(60) -> utf8_spanish_ci
2 de 3: HTML y PHP
Ahora debemos crear los scripts para obtener y modificar los datos.
Empecemos por crear el archivo index.php, el cual comprobará si la sesión está iniciada o no. Lo que necesitamos es: iniciar la sesión (si existe) con la función session_start() de PHP, comprobar si los datos de sesión están seteados (establecidos), y actuar en consecuencia.
En este caso, si la sesión está iniciada, incluiremos el archivo página.php , y si no hay ninguna sesión creada, incluiremos el archivo login.php. Estos archivos los crearemos más adelante.
El archivo debe estar totalmente vacío. Las etiquetas HTML (doctype, html, head, body, etc.) que puedan generar algunos editores de texto (como Dreamweaver) deben ser eliminadas.
Código fuente de index.php:
<?php //Iniciamos la sesión session_start(); //Evitamos que nos salgan los NOTICES de PHP error_reporting(E_ALL ^ E_NOTICE); //Comprobamos si la sesión está iniciada //Si existe una sesión correcta, mostramos la página para los usuarios //Sino, mostramos la página de acceso y registro de usuarios if(isset($_SESSION['usuario']) and $_SESSION['estado'] == 'Autenticado') { include('pagina.php'); die(); } else { include('login.php'); die(); }; ?>
Ahora creamos el archivo de acceso y registro: login.php, donde comenzaremos por comprobar si existe una sesión utilizando nuevamente la función de PHP. Esta función debe ir encima de la declaración del doctype de HTML.
A continuación hay que agregar la librería de jQuery en el head del HTML para poder usar la función AJAX. Yo utilizaré la versión 1.9.1 minificada que tengo descargada.
Es hora de empezar a estructurar el cuerpo del archivo. Lo primero es crear un contenedor (div #mensaje) donde estarán las respuestas del servidor respecto a las acciones de los usuarios en el formulario. Las respuestas las recibiremos después a través de AJAX.
Una vez creado ese contenedor, debemos crear dos formularios:
- ID acceso, método POST. Contiene:
– Input de tipo texto, con nombre userAcceso, clase acceso (*1), id userAcceso.
– Input de tipo contraseña, con nombre passAcceso, clase acceso (*1), id passAcceso.
– Input de tipo submit, con nombre acceso (opcionalmente, valor Acceder). - ID registro, método POST. Contiene:
– Input de tipo texto, con nombre userRegistro, clase registro (*1), id userRegistro.
– Input de tipo contraseña, con nombre passRegistro, clase registro (*1), id passRegistro.
– Input de tipo submit, con nombre registro (opcionalmente, valor Registrarse).
Adicionalmente, a los inputs podemos añadirle un placeholder. un auto-completado apagado, aceptar UTF-8 y establecer los action vacíos.
*1 Esto se realiza para posteriormente vaciar los inputs desde PHP. Lo mostraré más adelante. Después simplemente debemos crear el método de envío desde el archivo login.php a PHP por medio de AJAX.
Código fuente de login.php:
<?php //Iniciamos la sesión session_start(); //Pedimos el archivo que controla la duración de las sesiones require('recursos/sesiones.php'); ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Acceso o registro</title> <script src="js/jquery-1.9.1.min.js"></script> </head> <body> <div id="mensaje" style="border:1px solid #CCC; padding:10px;"></div> <h2>Accede a tu cuenta</h2> <div class="formulario-acceso"> <form method="POST" id="acceso" action="" accept-charset="utf-8"> <input type="text" name="userAcceso" class="acceso" id="userAcceso" placeholder="Usuario" autocomplete="off" maxlength="20"> <input type="password" name="passAcceso" class="acceso" id="passAcceso" placeholder="Contraseña" autocomplete="off" maxlength="60"> <input type="submit" name="acceso" class="boton-principal" value="Acceder"> </form> </div> <hr> <h2>Crea una cuenta</h2> <div class="formulario-registro"> <form method="POST" id="registro" action="" accept-charset="utf-8"> <input type="text" name="userRegistro" class="registro" id="userRegistro" placeholder="Usuario" autocomplete="off" maxlength="20"> <input type="password" name="passRegistro" class="registro" id="passRegistro" placeholder="Contraseña" autocomplete="off" maxlength="60"> <input type="submit" name="registro" class="boton-principal" value="Registrarse"> </form> </div> <script> //Guardamos el controlador del div con ID mensaje en una variable var mensaje = $("#mensaje"); //Ocultamos el contenedor mensaje.hide(); //Cuando el formulario con ID acceso se envíe... $("#acceso").on("submit", function(e){ //Evitamos que se envíe por defecto e.preventDefault(); //Creamos un FormData con los datos del mismo formulario var formData = new FormData(document.getElementById("acceso")); //Llamamos a la función AJAX de jQuery $.ajax({ //Definimos la URL del archivo al cual vamos a enviar los datos url: "recursos/acceder.php", //Definimos el tipo de método de envío type: "POST", //Definimos el tipo de datos que vamos a enviar y recibir dataType: "HTML", //Definimos la información que vamos a enviar data: formData, //Deshabilitamos el caché cache: false, //No especificamos el contentType contentType: false, //No permitimos que los datos pasen como un objeto processData: false }).done(function(echo){ //Una vez que recibimos respuesta //comprobamos si la respuesta no es vacía if (echo !== "") { //Si hay respuesta (error), mostramos el mensaje mensaje.html(echo); mensaje.slideDown(500); } else { //Si no hay respuesta, redirecionamos a donde sea necesario //Si está vacío, recarga la página window.location.replace(""); } }); }); //Cuando el formulario con ID acceso se envíe... $("#registro").on("submit", function(e){ //Evitamos que se envíe por defecto e.preventDefault(); //Creamos un FormData con los datos del mismo formulario var formData = new FormData(document.getElementById("registro")); //Llamamos a la función AJAX de jQuery $.ajax({ //Definimos la URL del archivo al cual vamos a enviar los datos url: "recursos/registro.php", //Definimos el tipo de método de envío type: "POST", //Definimos el tipo de datos que vamos a enviar y recibir dataType: "HTML", //Definimos la información que vamos a enviar data: formData, //Deshabilitamos el caché cache: false, //No especificamos el contentType contentType: false, //No permitimos que los datos pasen como un objeto processData: false }).done(function(echo){ //Cuando recibamos respuesta, la mostramos mensaje.html(echo); mensaje.slideDown(500); }); }); </script> </body> </html>
Como se puede apreciar, justo después de iniciar sesión llamo a un archivo llamado sesiones.php, y ¿qué es esto? Bueno, para evitar tener que estar modificando los archivos de configuración (.ini) del servidor (Apache), es decir, para no usar ini_set(«session.cookie_lifetime») ni ini_set(«session.gc_maxlifetime») en nuestro(s) script(s) en PHP, debemos definir la duración de la sesión en PHP. Esto se haría a través de una comprobación de tiempo.
Código fuente de sesiones.php:
<?php //Evitamos que nos salgan los NOTICES de PHP error_reporting(E_ALL ^ E_NOTICE); //Obtenemos el timestamp del servidor de cuanto se hizo la petición $hora = $_SERVER["REQUEST_TIME"]; //Duración de la sesión en segundos $duracion = 60; //Si el tiempo de la petición* es mayor al tiempo permitido de la duración, //destruye la sesión y crea una nueva if (isset($_SESSION['ultima_actividad']) && ($hora - $_SESSION['ultima_actividad']) > $duracion) { session_unset(); session_destroy(); session_start(); }; // * Por esto este archivo debe ser incluido en cada página que necesite comprobar las sesiones //Definimos el valor de la sesión "ultima_actividad" como el timestamp del servidor $_SESSION['ultima_actividad'] = $hora; ?>
Ahora debemos recibir los datos de los formularios. Para eso, comenzaremos por el registro.
Realizamos la conexión a la base de datos, almacenamos los dos valores (usuario y contraseña) en una variable, realizamos un filtro anti-XSS, definimos la cantidad máxima de caracteres por input (para reforzar la seguridad), y comprobamos que los valores no sean de mayor cantidad de caracteres de lo que es posible. Después convertimos el valor del usuario (userRegistro) en minúsculas, seleccionamos todos los nombres de usuario en minúsculas de la BBDD, y checkeamos la información: si los campos están vacíos, mostramos error, si el usuario introducido que pasamos a minúsculas es igual a algún usuario existente en algún campo de usernamelowercase, mostramos error. Si no hay errores, se pasa a encriptar la contraseña (en este caso, lo hago con Blowfish + crypt()) y registramos los datos en la base de datos.
Para el formulario de acceso:
Realizamos la conexión a la base de datos, almacenamos los dos valores (usuario y contraseña) en una variable, realizamos un filtro anti-XSS, definimos la cantidad máxima de caracteres por input (para reforzar la seguridad), y comprobamos que los valores no sean de mayor cantidad de caracteres de lo que es posible. Después convertimos el valor del usuario (userAcceso) en minúsculas para poder realizar una consulta de comparación en la base de datos. Por último, hacemos un checkeo de datos (si el nombre existe, si los campos no están vacíos, o si la contraseña no es correcta), y si está todo bien, simplemente creamos una nueva sesión.
Código fuente de registro.php:
<?php //Conectamos a la base de datos require('../../conexion.php'); //Obtenemos los datos del formulario de registro $userPOST = $_POST["userRegistro"]; $passPOST = $_POST["passRegistro"]; //Filtro anti-XSS $userPOST = htmlspecialchars(mysqli_real_escape_string($conexion, $userPOST)); $passPOST = htmlspecialchars(mysqli_real_escape_string($conexion, $passPOST)); //Definimos la cantidad máxima de caracteres //Esta comprobación se tiene en cuenta por si se llegase a modificar el "maxlength" del formulario //Los valores deben coincidir con el tamaño máximo de la fila de la base de datos $maxCaracteresUsername = "20"; $maxCaracteresPassword = "60"; //Si los input son de mayor tamaño, se "muere" el resto del código y muestra la respuesta correspondiente if(strlen($userPOST) > $maxCaracteresUsername) { die('El nombre de usuario no puede superar los '.$maxCaracteresUsername.' caracteres'); }; if(strlen($passPOST) > $maxCaracteresPassword) { die('La contraseña no puede superar los '.$maxCaracteresPassword.' caracteres'); }; //Pasamos el input del usuario a minúsculas para compararlo después con //el campo "usernamelowercase" de la base de datos $userPOSTMinusculas = strtolower($userPOST); //Escribimos la consulta necesaria $consultaUsuarios = "SELECT usernamelowercase FROM `mmv005`"; //Obtenemos los resultados $resultadoConsultaUsuarios = mysqli_query($conexion, $consultaUsuarios) or die(mysql_error()); $datosConsultaUsuarios = mysqli_fetch_array($resultadoConsultaUsuarios); $userBD = $datosConsultaUsuarios['usernamelowercase']; //Si el input de usuario o contraseña está vacío, mostramos un mensaje de error //Si el valor del input del usuario es igual a alguno que ya exista, mostramos un mensaje de error if(empty($userPOST) || empty($passPOST)) { die('Debes introducir datos válidos'); } else if ($userPOSTMinusculas == $userBD) { die('Ya existe un usuario con el nombre '.$userPOST.''); } else { //Si no hay errores, procedemos a encriptar la contraseña //Lectura recomendada: https://mimentevuela.wordpress.com/2015/10/08/establecer-blowfish-como-salt-en-crypt-2/ function aleatoriedad() { $caracteres = "abcdefghijklmnopqrstuvwxyz1234567890"; $nueva_clave = ""; for ($i = 5; $i < 35; $i++) { $nueva_clave .= $caracteres[rand(5,35)]; }; return $nueva_clave; }; $aleatorio = aleatoriedad(); $valor = "07"; $salt = "$2y$".$valor."$".$aleatorio."$"; $passwordConSalt = crypt($passPOST, $salt); //Armamos la consulta para introducir los datos $consulta = "INSERT INTO `mmv005` (username, usernamelowercase, password) VALUES ('$userPOST', '$userPOSTMinusculas' , '$passwordConSalt')"; //Si los datos se introducen correctamente, mostramos los datos //Sino, mostramos un mensaje de error if(mysqli_query($conexion, $consulta)) { die('<script>$(".registro").val("");</script> Registrado con éxito <br> Ya puedes acceder a tu cuenta <br> <br> Datos:<br> Usuario: '.$userPOST.'<br> Contraseña: '.$passPOST); } else { die('Error'); }; };//Fin comprobación if(empty($userPOST) || empty($passPOST)) ?>
Código fuente de acceder.php:
<?php //Conectamos a la base de datos require('../../conexion.php'); //Obtenemos los datos del formulario de acceso $userPOST = $_POST["userAcceso"]; $passPOST = $_POST["passAcceso"]; //Filtro anti-XSS $userPOST = htmlspecialchars(mysqli_real_escape_string($conexion, $userPOST)); $passPOST = htmlspecialchars(mysqli_real_escape_string($conexion, $passPOST)); //Definimos la cantidad máxima de caracteres //Esta comprobación se tiene en cuenta por si se llegase a modificar el "maxlength" del formulario //Los valores deben coincidir con el tamaño máximo de la fila de la base de datos $maxCaracteresUsername = "20"; $maxCaracteresPassword = "60"; //Si los input son de mayor tamaño, se "muere" el resto del código y muestra la respuesta correspondiente if(strlen($userPOST) > $maxCaracteresUsername) { die('El nombre de usuario no puede superar los '.$maxCaracteresUsername.' caracteres'); }; if(strlen($passPOST) > $maxCaracteresPassword) { die('La contraseña no puede superar los '.$maxCaracteresPassword.' caracteres'); }; //Pasamos el input del usuario a minúsculas para compararlo después con //el campo "usernamelowercase" de la base de datos $userPOSTMinusculas = strtolower($userPOST); //Escribimos la consulta necesaria $consulta = "SELECT * FROM `mmv005` WHERE usernamelowercase='".$userPOSTMinusculas."'"; //Obtenemos los resultados $resultado = mysqli_query($conexion, $consulta); $datos = mysqli_fetch_array($resultado); //Guardamos los resultados del nombre de usuario en minúsculas //y de la contraseña de la base de datos $userBD = $datos['usernamelowercase']; $passwordBD = $datos['password']; //Comprobamos si los datos son correctos if($userBD == $userPOSTMinusculas and password_verify($passPOST, $passwordBD)){ session_start(); $_SESSION['usuario'] = $datos['username']; $_SESSION['estado'] = 'Autenticado'; /* Sesión iniciada, si se desea, se puede redireccionar desde el servidor */ //Si los datos no son correctos, o están vacíos, muestra un error //Además, hay un script que vacía los campos con la clase "acceso" (formulario) } else if ( $userBD != $userPOSTMinusculas || $userPOST == "" || $passPOST == "" || !password_verify($passPOST, $passwordBD) ) { die ('<script>$(".acceso").val("");</script> Los datos de acceso son incorrectos'); } else { die('Error'); }; ?>
Para finalizar, crearemos el archivo pagina.php, que es donde accederán los usuarios logueados y el archivo salir.php, que nos permitirá cerrar sesión.
Para este ejemplo, la página de los usuarios será muy simple: primero se comprobará si los datos están seteados, si no lo están, se redirecciona al index, y si lo están, se define el botón de cerrar sesión y se incluye el archivo sesiones.php para controlar la duración de la sesión actual.
Código fuente de pagina.php:
<?php //Reanudamos la sesión session_start(); //Comprobamos si el usario está logueado //Si no lo está, se le redirecciona al index //Si lo está, definimos el botón de cerrar sesión y la duración de la sesión if(!isset($_SESSION['usuario']) and $_SESSION['estado'] != 'Autenticado') { header('Location: index.php'); } else { $estado = $_SESSION['usuario']; $salir = '<a href="recursos/salir.php" target="_self">Cerrar sesión</a>'; require('recursos/sesiones.php'); }; ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Bienvenido</title> </head> <body> <div><p>Hola, <?php echo $estado; ?><br> <?php echo $salir; ?></p><div> </body> </html>
Código fuente de salir.php:
<?php //Reanudamos la sesión session_start(); //Requerimos los datos de la conexión a la BBDD require('../../conexion.php'); //Des-establecemos todas las sesiones unset($_SESSION); //Destruimos las sesiones session_destroy(); //Cerramos la conexión con la base de datos mysqli_close($conexion); //Redireccionamos a el index header("Location: ../"); die(); ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Cerrando sesión...</title> </head> <body> </body> </html>
3 de 3: Ejemplos
Una vez hecho todo lo anterior, podemos observar los resultados finales. Yo no lo he aplicado ningún estilo, pero se puede hacer sin problemas.
Conclusión:
Para comenzar a trabajar con sesiones, PHP y MySQL, este tutorial es bastante completo. Hay que tener en cuenta más cuestiones de seguridad que aquí no se tratan, como que es imprescindible usar SSL (HTTPS) para enviar datos de usuarios. Si te sirvió, por favor, compártelo.
NOTA: La estructura de los archivos es la siguiente:
index.php login.php pagina.php js (carpeta) L jquery-1.9.1.min.js recursos (carpeta) L acceder.php L registro.php L salir.php L sesiones.php
Espero que el tutorial haya sido de utilidad. Nos leemos, ¡saludos!
Muy bueno, justo lo que estaba buscando, no se si me falto algo por poner pero registro el usuario correctamente y luego realizo el login y al darle a entrar no me entra en la sesión, solo entra si actualizo o recargo la página con f5, ¿Sabría porque? o es que debo hacer una redirección manual para que el usuario a su sitio? Gracias.
Me gustaMe gusta
Claro, en el archivo acceder.php hay un comentario que dice:
Saludos.
Me gustaMe gusta
Si justo ahí puse lo siguiente:
header(‘Location: backend/page_ready_user_profile.php’);
y también lo puse en pagina.php
else {
$estado = $_SESSION[‘usuario’];
$salir = ‘Cerrar sesión‘;
require(‘recursos/sesiones.php’);
header(‘Location: backend/page_ready_user_profile.php’);
};
y me redirecciona sólo cuando actualizo con f5. Un saludo.
Me gustaMe gusta
Gracias, ya he conseguido hacer la redirección, en donde usted comenta he puesto lo siguiente:
echo ‘
window.location.assign(«backend/page_ready_user_profile.php»);
‘;
Me gustaLe gusta a 1 persona
Hola Rocanrol, en http://www.pcpiezas.info/ he implementado el tutorial buscar usuario y el tutorial de login. En el siguiente ejemplo si hace login con usuario: admin y pass: admin accede accede al directorio usuarios, http://pcpiezas.info/usuarios/ pero a su vez me sigue permitiendo acceder a http://pcpiezas.info ¿ Si no es molestia y no le requiere tiempo sabría darme una idea de que debo de hacer para en caso de estar logueado solo permita estar dentro de http://pcpiezas.info/usuarios y no permita acceder a ningun otro directorio o carpeta y en caso contrario de que el usuario no se halla logueado pues que no permita acceder a http://pcpiezas.info/usuarios. Un saludo.
Como comentario adicional, para cualquier usuario de este sitio que haga el tutorial, cuando lo suba al servidor debe tener en cuenta que necesita la version de PHP 5.5 o superior.
Me gustaMe gusta
Lo tenía ante mis ojos, es así?
if(isset($_SESSION[‘usuario’]) and $_SESSION[‘estado’] == ‘Autenticado’) {
pag a redireccionar
}
y así debo hacerlo en cada una de las páginas?
Me gustaMe gusta
Correcto. De todas formas, no olvide añadir un tercer factor para los administradores. Algo tipo:
Eso se configuraría en «acceder.php».
Me gustaMe gusta
Gracias por el aporte, pero te pido el apoyo ya que me marca error al iniciar sesión ya cheque el código y no le encuentro la falla según yo esta todo bien
Conectado a la base de datos
Fatal error: Call to undefined function password_verify() in D:\AppServ\www\cvu\recursos\acceder.php on line 46
saludos
Me gustaMe gusta
Parece ser un problema de PHP, password_verify() funciona desde la 5.5.0, asegúrate de tener esa versión o alguna mayor.
Me gustaMe gusta
Hola, quería darte las gracias porque me ha ayudado bastante tu tutorial, y de pasada hacerte una consulta, en mi proyecto tengo diferentes usuarios, y a cada uno le asigne un tipo agregando una nueva columna, la consulta es que realice esta condicion:
if(isset($_SESSION[‘usuario’]) $_SESSION[‘tipo’] == ‘1’ and $_SESSION[‘estado’] == ‘Autenticado’) {
header(‘Location: usuario1.php’);
}
y asi con cada tipo con su respectiva redireccion, el problema que tengo es que como puedo hacer para que el usuario1 en la url no pueda acceder a la pagina del usuario2 ?
Te agradeceria pudieras aydurme en mi duda, muchas gracias
Me gustaMe gusta
Hola, Andre. Gracias por tus comentarios 🙂
El asunto es: no debes crear un archivo por usuario. Sino obtener el tipo en cada página.
La condición if() está mal aplicada, mira:
Debería ser:
Ahora, ¿de dónde sacas el número de «tipo»? ¿Le asignas uno a cada usuario? ¿Es un ID auto-incrementado en la base de datos?
Saludos.
Me gustaMe gusta
El tipo es un numero que le asigno según el tipo de usuario, no es auto-incrementado, y el tema es que eso me resulta y cada usuario segun su tipo se redirecciona a la pagina que le corresponde, pero estos pueden a traves de la url ingresar a todas las otras paginas, ya que esta logeado con el session, entonces queria saber si hay alguna forma de evitar eso, que no pueda entrar a la pagina del usuario2.
Y me podrias explicar eso de obtener el tipo en cada pagina?
Me gustaMe gusta
y el archivo conexion.php ?????
Me gustaMe gusta
En la parte del tutorial que dice «Realizamos la conexión a la base de datos».
Me gustaMe gusta
Excelente tutorial, un millón de gracias
Me gustaMe gusta
Me alegra que te haya resultado útil 🙂
Saludos!
Me gustaMe gusta
hola amigo esta bien todo pero como hago para que el usuario que aya iniciado sesion le aparezca el nombre en el menu de navegacion
Me gustaMe gusta
Hola. Podrías guardar el nombre en una cookie de sesión y mostrarlo donde lo necesites.
Me gustaMe gusta
Tengo una duda; al momento de que el usuario supere el tiempo indicado en el script, las sesiones efectivamente se destruyen pero igual sigue logueado, recién cuando refresco la página sale al index y, por ende, al formulario de ingreso.
¿Esto es así o hay que agregar/eliminar algo en el script de control de sesión?
Saludos!
Me gustaMe gusta
Hola.
Lo que describes es el funcionamiento correcto del código provisto.
Saludos.
Me gustaMe gusta
Le Falto incluir el archivo de Conexion
Me gustaMe gusta
No, revisa bien el tutorial:
«[…] Realizamos la conexión a la base de datos (LINK A LA ENTRADA QUE HABLA SOBRE CONECTAR A LA BD), almacenamos los dos valores (usuario y contraseña) en una variable […]»
Me gustaMe gusta
como lo conecto a la base de datos? en las primeras lineas del archivo acceder.
Me gustaMe gusta
Tengo un tutorial algo desactualizado sobre como conectar con la BD.
https://mimentevuela.wordpress.com/2015/07/20/conectar-con-mysqli-a-base-de-datos/
PERO te recomiendo que uses la programación orientada a objetos.
Saludos!
Me gustaMe gusta
Hola que tal,
Gracias por el aporte, aunque tiene un par de años que no programo en php espero no liarla mucho. Tengo una pregunta, por qué me sale este error: #1089 – Parte de la clave es erronea. Una parte de la clave no es una cadena o la longitud usada es tan grande como la parte de la clave.
Gracias por tu comentario.
Saludos
Me gustaMe gusta
Hola, ¿dónde te muestra ese error?
Me gustaMe gusta
Hola, ese error me lo muestra al crear la tabla con los datos, no sé si es el campo de ID o el campo de password.
Saludos.
Me gustaMe gusta
¿Estás intentando asignar una longitud a el campo ID? Ese puede ser el problema. Si el ID es auto-incrementable, no necesitas definir un valor.
Me gustaMe gusta
Listo ya encontré el error, al momento de poner los valores de Unique o de Primary arroja una ventana en el caul te pide el nombre del campo, y los valores por ejemplo: varchar(20) pero no se le agrega nada en esa ventana y me dejó crear la tabla, si tengo alguna otra duda te estaré escribiendo.
Gracias y saludos.
Me gustaMe gusta
Hola Rocanrol, no puedo hacer funcionar el codigo, soy nuevito en programacion y me interesa mucho ver funcionar este codigo aprenderia bastante, tengo creada todos los documentos pero solo llego a la primera pagina, me dice que esta conectado a la base de datos pero nada mas…cree un usuario de prueba en la BD con usuario y pass y tampoco me funciona, ¿que podria ser? la version de js es distinta jquery-3.2.1.min.js y tambien probe con la de google http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
es lo unico que encuentro diferente. tengo wamp64 y win10.
Saludos.
Me gustaMe gusta
Hola. No acostumbro a dar respuestas personalizadas, porque cada caso es diferente.
Sin embargo, te recomiendo que checkees la consola de Javascript (desde Dev Tools), a ver si arroja algún error.
Me gustaMe gusta
Ok, lo revisare Gracias.
Me gustaMe gusta
Excelente tutoria, pero podrian ayudarme en algo. Es que al momento de verificar el password
if( password_verify($passPOST, $passwordBD)){
session_start();
$_SESSION[‘usuario’] = $datos[‘nom_usuario_sif’];
$_SESSION[‘estado’] = ‘Autenticado’;
die(‘Ha iniciado sesion correctamente como’.$_SESSION[‘usuario’]);
}
No me valida el if y se salta al else.
Lo demas funciona de manera correcta.
Alguien sabe por qué esta función password_verify() no me valida ?
Gracias
Me gustaMe gusta
Buenas tardes apreciados amigos.
Ya encontrè el detalle. Era que el tamaño del campo en la base de datos era mas pequeño que el que se generaba al encryitar y al comparar la cadena guardada en el campo password, no estaba completa. saludos
Me gustaMe gusta
Muchas gracias, me gusta mucho este blog
Me gustaMe gusta
Es la página con mejor explicación y estructura que he visto.
¡Muchas gracias!
Me gustaMe gusta