Usando sessões no PHP para autenticação de usuários

Quando desenvolvemos uma aplicação muitas vezes é necessário um sistema de autenticação de usuário para garantir que apenas pessoas autorizadas acessem os dados.

Uma solução possível é a utilização de sessões em PHP que permite criar valores para serem usados ao longo da visita do usuário. Esses valores da sessão podem ser usados em qualquer parte do site, pois funcionam como um mecanismo de conexão entre o servidor web e o navegador do usuário.

Quando um visitante acessa o seu site e é criado uma sessão é gerado um cookie (arquivo de texto) no computador dele informando um id único de sessão, e o PHP usa esse identificador para “organizar” e conhecer as sessões entre os visitantes e o seu site.

Para abrir a sessão é só usar esse comando no PHP:

session_start();

Depois de iniciada a sessão você pode definir valores dentro dela dessa forma:

$_SESSION['usuario'] = 'Visitante';

E quando você precisar exibir o valor salvo na sessão é só fazer assim:

echo $_SESSION['usuario'];

Para destruir a sessão você usa:

session_destroy();

Com isso você tem total controle das sessões no seu site e pode salvar, por exemplo, o nome de usuário depois que ele fez o login e salvar outra variável informando que o usuário está logado. Esta é uma prática muito comum em sistemas de autenticação de usuário.

Exemplo prático:

No form HTML

<form method="POST" action="usuario-login.php">
   <h4>Bem-vindo!</h4>      
   <input type="text" name="usuario" id="usuario" />
   <input type="password" name="senha" id="senha" />  
   <input type="submit" value="Entrar" />
</form>

No usuário-login.php

<?php
$usuario = $_POST["usuario"];
$senha = $_POST["senha"];

$query = "SELECT * FROM usuarios WHERE usuario='$usuario' and senha='$senha'";

$conexao = new PDO('mysql:host=127.0.0.1;dbname=sitepessoal', 'root', '');
$resultado = $conexao->query($query);
$logado = $resultado->fetch();
$id_logado = $logado['id'];

if ($logado == null) {
   // Usuário ou senha inválida
   header('Location: usuario-erro.php');
} 
else {
   session_start();
   $_SESSION['usuario_logado'] = $id_logado;
   // Direciona o usuário para o painel administrativo do sistema
   header('Location: painel.php');
}
die();
?>

É sempre recomendável que você coloque um link para que o usuário encerre a sessão de login atual caso ele não queira mais permanecer na página. 

<?php
session_start();
session_destroy();
header('Location: index.html');
?>