Tutorial para criar uma sessão em PHP
Este tutorial traz um exemplo simples de como implementar uma sessão em PHP. As sessões permitem armazenar informações em um escopo global, você pode consultar o manual completo em https://www.php.net/manual/pt_BR/ref.session.php
Em nosso exemplo vamos aplicar a sessão para validar o acesso às páginas de um site, ou seja, o usuário só poderá navegar pelas páginas do site, após validar suas credenciais em um formulário de login.
O exemplo pode ser acesso pelo link: Exemplo
Os códigos fonte do exemplo podem ser baixados no link: Códigos
Passo 1 - Criar uma tabela de usuários no banco
Irei adicionar a tabela no dataBase que estamos utilizando para o projeto final (ehealth - referência para a comunicação php). Utilize o phpmyadmin para facilitar as manipulações.
A tabela será composta por 5 colunas: usuario (primary key, auto incrementável), login, senha, nome e privilegio
script para criar tabelas tbusuarios
Passo 2 - Adicionar dois usuarios na tabela.
Nesta tabela utilizaremos a função hash MD5 para armazenarmos as senhas. Ao desenvolvermos aplicações que envolvem login e senha é fortemente indicado que as senhas sejam criptografadas antes de armazenarmos. Desta forma, mesmo os administradores do banco de dados não terão acesso às senha.
Como neste exemplo não iremos implementar o processo para cadastrar novos usuários, iremos utilizar o processo por meio de um gerador online. O gerador de hash MD5 pode ser acessado pelo link: MD5 hash generator. No mesmo site é o tópico pode ser aprofundado.
O hash para a senha "abc1234" é: a141c47927929bc2d1fb6d336a256df4 e o hash para a senha "admin123" é 0192023a7bbd73250516f069df18b500. Iremos armazená-los no campo senha de cada usuário.
O campo "privilegio" irá simular dois tipos de acessos, o valor 0 será para o usuário padrão e o valor 1 para o usuário com privilégios de administrador.
script para inserir usuarios
Passo 3 - Comunicação com o BD e criar tela de login
Com a tabela criada e alimentada, criaremos 3 arquivos: O arquivo conn.php que fará a comunicação com o banco de dados, o arquivo index.php referente a tela de login e o arquivo estilos.css com os estilos da tela. Criei uma tela de login bastante simples utilizando a biblioteca bootstrap. As credenciais do conn.php são as padrões de servidores locais.
Os códigos para comunicação, o html e o css são bastante convencionais. Existe apenas uma novidade nos códigos listados abaixo, as 5 primeiras linhas no arquivo index.php. Estas linhas são as instruções para limpar as variáveis globais (que veremos na próxima etapa) e destruir a sessão.
Neste exemplo, sempre que o usuário entrar no index.php, uma eventual sessão aberta será limpa. Para "deslogar" basta voltarmos para o index.php.
conn.php
index.php
estilos.css
Passo 4 - Validar dados e iniciar sessão
Nesta etapa iremos criar um arquivo para validar os dados informados no formulário e iniciar uma sessão. A descrição das etapas estão após o código.
validar.php
Linha 1 - A sessão é inciada. Uma vez que abrimos uma sessão, dados poderam ser armazenados na mesma. Enquanto a sessão não é destruida, os dados poderam ser acessados em todas as páginas do subdomínio do site. No exemplo, iremos armazenar as informações do usuário caso suas credenciais sejam validadas.
Linha 4 - Estabelecemos a comunicação com o banco de dados.
Linhas 10 e 11 Atribuir as informações da requisição post as variáveis login e senha.
Linha 13 Converter a string senha para hash MD5. Esse método de criptografia não permite o processo inverso, ou seja, com a hash não podemos obter o texto da senha, mas com o texto da senha podemos obter o hash.
Linha 15 Consulta ao banco.
Linha 23 Verifica se houve retorno na consulta.
Linhas 25, 26 e 27 Cria variáveis globais da sessão e armazena as informações do usuário.
Linha 28 Redireciona para home.php (arquivo que iremos criar na próxima etapa)
Linhas 31 - 35 Caso não haja correpondencia a consulta sql (login e/ou senha incorretos), é enviada uma mensagem de erro e o usuário é redirecionado a tela de login.
Passo 5 - Tela de acesso interno
Nesta etapa iremos criar uma tela de acesso interno home.php. Esta tela só estará acessível após a validação dos dados da tela de login, caso o usuário tente acessar essa tela sem a validção prévia, uma mensagem de Acesso Negado será apresentada.
Os valores globais da serão utilizados em dois momentos (ver código abaixo). Na linha 4 onde verificamos se há valor na variável "userID" da sessão e na linha 23, onde imprimimos o nome do usuário.
Para finalizarmos a sessão, basta redirecionarmos o usuário para o index.php (feito através do link na linha 21), como já citado anteriormente, as primeiras instruções do arquivo index.php são limpar e destruir a sessão.
home.php
Passo 6 - Verificar permissão do usuário
Esta etapa trás um exemplo bastante simples de comos podemos utilizar sessões para validar permissões.
Criaremos dois arquivos o adm.php e comum.php. O primeiro irá verificar se além de logado o usuário possui como flag de privilégio valor 1 o segundo irá realizar a mesma verificação do arquivo home.php.
Após criar todos os arquivos, navegue nas páginas com os dois usuários