Esta lección es parte de un tutorial de autenticación de usuario en curso. La primera parte está aquí: Autenticación de usuario junto con todos los archivos que necesita.

Para la página de inicio de sesión, lo que haremos es obtener el nombre de usuario y la contraseña de los cuadros de texto de un formulario. Primero veremos si el nombre de usuario existe en la base de datos. Si es así, podemos seguir adelante y verificar la contraseña usando una función PHP incorporada llamada Contraseña verificada. Si el inicio de sesión es exitoso, podemos hacer dos cosas: una, configurar una variable de sesión que se pueda usar en todas las páginas de su sitio. Esta variable de sesiones se utiliza para que los usuarios que no han iniciado sesión no puedan ver ninguna página, pero se les redirige a la página de inicio de sesión. La otra cosa que haremos es redirigir a un usuario que haya iniciado sesión correctamente a la página correcta. Después de todo, no desea que los usuarios se queden en la página de inicio de sesión.

Así que abre el guión llamado login.php y eche un vistazo al código. (Es uno de los archivos que descargó desde aquí: scripts).

La parte inferior de la página es el HTML del formulario de usuario. Son solo dos cuadros de texto y un botón Enviar. El código PHP comienza configurando algunas variables:

$ uname = "";
$ pword = "";
$ errorMessage = "";

Luego obtenemos el nombre de usuario y la contraseña de los cuadros de texto:

$ uname = $ _POST['username'];
$ pword = $ _POST['password'];

La conexión al servidor y la base de datos es la misma que antes (use exigir para obtener el archivo de configuración que configuró y obtener esas constantes).

require '../../configure.php';
$ base de datos = "inicio de sesión";
$ db_found = new mysqli (DB_SERVER, DB_USER, DB_PASS, $ base de datos);

Si se encuentra la base de datos, comenzamos una declaración preparada:

$ SQL = $ db_found-> prepare ('SELECT * FROM login WHERE L1 =?');

El SQL selecciona todos los registros donde el nombre de usuario coincide con el proporcionado:

$ SQL-> bind_param ('s', $ uname);

Luego ejecutamos y vemos si hay algún resultado:

$ SQL-> ejecutar ();
$ resultado = $ SQL-> get_result ();

Solo necesitamos verificar si hay un resultado, ya que nuestra página de registro aseguró que todos los nombres de usuario fueran únicos.

if ($ resultado-> num_rows == 1) {

Si no hay resultados, podemos imprimir un mensaje:

$ errorMessage = "nombre de usuario FALLIDO";

(Aunque hemos dicho "error de nombre de usuario", probablemente no quieras ser tan explícito. La idea es no dar pistas a un atacante. Por lo tanto, puedes decir algo como "Error de inicio de sesión". Para realizar pruebas, sin embargo, nos gustaría saber por qué algo salió mal).

Si obtenemos un resultado, entonces necesitamos la matriz de resultados completa:

$ campo_db = $ resultado-> fetch_assoc ();

La función fetch_assoc, recuerde, le devuelve una matriz, con todas las posiciones en la matriz llenas con un campo en la fila de la base de datos que se devolvió. La variable $ db_field se vería así:

$ db_field['$ID'] = una identificación
$ db_field['L1'] = un nombre de usuario
$ db_field['L2'] = una contraseña

El que queremos comprobar es el campo L2, que contiene la contraseña:

if (contraseña_verificar ($ pword, $ db_field['L2'])) {
}

demás {
}

Dentro de la declaración IF está esto:

contraseña_verify ($ pword, $ db_field['L2'])

Para verificar una contraseña en una tabla de base de datos, puede usar la función PHP incorporada
Contraseña verificada. La función password_verify necesita dos cosas: la contraseña que desea verificar y el hash de contraseña con el que desea verificarla. Para nosotros, el hash de la contraseña está en $ db_field['L2'] variable. La contraseña dentro de la variable $ pword proviene del cuadro de texto del formulario. Cuando compare los dos, tendrá VERDADERO, la contraseña es correcta, o FALSO, la contraseña es incorrecta.

Si la contraseña y el nombre de usuario están bien, tenemos estas tres líneas de código para la declaración IF:

session_start ();
$ _SESIÓN['login'] = "1";
encabezado ("Ubicación: page1.php");

Para que un usuario pueda ser recordado en diferentes páginas web, puede usar algo llamado Sesión. Una sesión es simplemente el tiempo que se pasa en un sitio o sitios en particular. Puede almacenar valores con sesiones, y estos valores estarán disponibles para todas las páginas del sitio. Cuando cierre su navegador, las sesiones finalizarán. Hay muchas formas de usar las sesiones, pero solo nos interesa guardar un valor para que se pueda consultar en diferentes páginas.

Para configurar una variable de sesión, debe emitir el comando de inicio de sesión:

session_start ();

Esto inicia una sesión de PHP. Para configurar una variable de sesión que pueda usar para almacenar valores, use esto:

$ _SESIÓN[ ]

Entre los corchetes de $ _SESSION, escribe el nombre de su variable. Como todos los nombres de variables, puede llamarlo casi como quiera. Almacenar valores en la variable de sesión es lo mismo que almacenar valores en una variable normal:

$ _SESIÓN['login'] = "1";

Después de que se ejecute el script, tendrá una variable de sesión llamada 'inicio de sesión' que se establece en un valor de 1, si el usuario está bien. A continuación, puede utilizar la función "encabezado" para redirigir al usuario a la página de su sitio para miembros, page1.php en el código anterior:

encabezado ("Ubicación: page1.php");

Observe la parte else de la declaración IF password_verify. Es esto:

demás {

$ errorMessage = "Inicio de sesión no válido";
session_start ();
$ _SESIÓN['login'] = '';

}

Primero, colocamos algo en el mensaje de error variable: inicio de sesión no válido. Esto se mostrará en la parte inferior del formulario HTML. A continuación, iniciamos una sesión y luego colocamos un valor en blanco en las sesiones de inicio de sesión:

session_start ();
$ _SESIÓN['login'] = '';

Estamos usando el mismo nombre de sesión (inicio de sesión), pero esta vez lo configuramos en una cadena en blanco. Si el usuario intenta obtener acceso a una parte restringida del sitio, buscaremos una cadena en blanco. Una cadena en blanco significa que el usuario no ha iniciado sesión correctamente, por lo que lo redirigiremos a la página de inicio de sesión.

Una nota de precaución aquí. Si desactiva las cookies en su navegador, ¡el script anterior puede negarse a funcionar! Esto se debe a que cuando usa session_start, PHP envía al navegador algo llamado ID de sesión. Esta es una larga cadena de letras y números. PHP intenta guardar el ID de la sesión como una cookie. Pero solo hace esto si se establece una línea en php.ini de su servidor Apache. Esta línea:

session.use_cookies = 1

Si establece este valor en 0, entonces debería poder iniciar sesión si las cookies están configuradas o no. El problema es que existe una buena posibilidad de que no pueda establecer esto en cero. Especialmente si tiene alojamiento web con otra persona. La solución, en ese caso, es comprobar si las cookies están habilitadas o no.

En realidad, no necesita PHP para verificar si las cookies están habilitadas. Puede utilizar Javascript. Pruebe esta cadena de búsqueda en Google:

javascript + cookies + habilitadas

Luego, debe encontrar muchas ideas para que los scripts verifiquen si las cookies están habilitadas en el navegador.

En la siguiente parte, verificaremos si el usuario ha iniciado sesión y ofreceremos la opción de cerrar la sesión.



<- Atrás una página | Pasar a la siguiente parte ->

Volver a la página de contenido de PHP

Recomendado para ti