Autenticação via sessão em PHP
Nossa autenticação deve funcionar da seguinte forma: o usuário,
que deseja se autenticar no site, acessa
a página login.php, insere o
login e senha corretos e em seguida navega pelas páginas
do site já estando autenticado.
Para que outras páginas do site saibam que nosso usuário está autenticado, devemos armazenar na sessão uma marcação sobre isso.
No momento, nossa autenticação não está totalmente funcional, pois ainda não conectamos a sessão e outras páginas do site não conseguem saber se o usuário está autenticado ou não.
Vamos armazenar a marcação de autenticação na variável
de sessão $_SESSION['auth'] - se estiver
escrito true, então o usuário está autenticado,
e se for null - então não está autenticado.
Vamos fazer a correção correspondente em nosso 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 {
// login ou senha incorretos
}
}
?>
Agora, em qualquer página do site, podemos verificar se o usuário está autenticado ou não, desta forma:
<?php
if (!empty($_SESSION['auth'])) {
}
?>
Podemos fechar o texto de alguma página inteiramente para o usuário não autenticado:
<?php if (!empty($_SESSION['auth'])): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>texto apenas para usuário autenticado</p>
</body>
</html>
<?php else: ?>
<p>por favor, faça login</p>
<?php endif; ?>
Podemos fechar apenas parte da página:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>texto para qualquer usuário</p>
<?php
if (!empty($_SESSION['auth'])) {
echo 'texto apenas para usuário autenticado';
}
?>
<p>texto para qualquer usuário</p>
</body>
</html>
Suponha que em nosso site, além da página login.php,
haja também as páginas 1.php, 2.php
e 3.php. Faça com que apenas usuários
autenticados possam acessar essas páginas.
Suponha que em nosso site haja também a página
index.php. Faça com que parte
desta página esteja aberta para todos os usuários,
e parte - apenas para os autenticados.
Modifique seu código para que, após uma autenticação bem-sucedida, o login do usuário também seja armazenado na sessão.
Faça com que, ao acessar qualquer página do site, o usuário autenticado veja seu login, e o não autenticado - um link para a página de autenticação.