Autorización mediante sesión en PHP
Nuestra autorización debería funcionar así: el usuario,
que quiere iniciar sesión en el sitio web, va
a la página login.php, ingresa las credenciales correctas
de usuario y contraseña y luego navega por las páginas
del sitio web ya habiendo iniciado sesión.
Para que otras páginas del sitio web sepan que nuestro usuario ha iniciado sesión, debemos almacenar una marca de esto en la sesión.
Por ahora nuestra autorización no es completamente funcional, ya que aún no hemos incorporado la sesión y otras páginas del sitio web no pueden determinar si el usuario ha iniciado sesión o no.
Almacenaremos la marca de autorización en la variable
de sesión $_SESSION['auth'] - si allí
está escrito true, entonces el usuario ha iniciado sesión,
y si es null - entonces no ha iniciado sesión.
Vamos a introducir el cambio correspondiente en nuestro código:
<?php
session_start();
if (!empty($_POST['password']) and !empty($_POST['login'])) {
$login = $_POST['login'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$_SESSION['auth'] = true;
} else {
// introdujo incorrectamente el usuario o la contraseña
}
}
?>
Ahora en cualquier página del sitio web podemos verificar si el usuario ha iniciado sesión o no, de esta manera:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Se puede ocultar el texto de alguna página completamente para el usuario no autenticado:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>texto solo para usuarios autenticados</p>
</body>
</html>
<?php else: ?>
<p>por favor, inicie sesión</p>
<?php endif; ?>
Se puede ocultar solo una parte de la página:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>texto para cualquier usuario</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'texto solo para usuarios autenticados';
}
?>
<p>texto para cualquier usuario</p>
</body>
</html>
Supongamos que en nuestro sitio, además de la página login.php,
también existen las páginas 1.php, 2.php
y 3.php. Configure para que a estas
páginas solo pueda acceder un usuario autenticado.
Supongamos que en nuestro sitio también hay una página
index.php. Configure para que una parte
de esta página esté abierta para todos los usuarios,
y otra parte - solo para usuarios autenticados.
Modifique su código para que upon exitoso inicio de sesión, también se guarde en la sesión el nombre de usuario del usuario.
Configure para que al acceder a cualquier página del sitio, el usuario autenticado vea su nombre de usuario, y el no autenticado - un enlace a la página de inicio de sesión.