Area restrita com Sessão no PHP

Se você quer ter uma área restrita em seu site, com direito a login e senha exigidos, sabia que é possível fazer isso utilizando sessões no PHP? Pois é, neste artigo vou mostrar como fazer isso passo a passo.

Area restrita com Sessão no PHP

A primeira coisa a se entender é o que é uma sessão, bem, uma sessão inicia quando o usuário faz uma conexão com o servidor web e termina quando o usuário fecha o navegador web. Note que apenas visitar outro site não irá encerrar a sessão, por exemplo, caso você inicie uma sessão em um site x, visite outro site y e depois volte ao site x, notará que a sessão ainda está ativa.

Uma sessão também pode ser explicitamente encerrada pelo usuário limpando os cookies do respectivo site ou efetuando o encerramento da sessão manualmente através dos link “Sair” oferecido pelo próprio site em questão. Ah, é interessante também salientar que o servidor web também define um tempo de vida de uma sessão, geralmente uma sessão dura cerca de meia hora, mas isso é configurável, você, por exemplo, pode definir que sua sessão vai durar apenas 5 minutos e após isso o usuário deverá efetuar login novamente.

Sessões são amplamente utilizadas, por exemplo, quando você acessa o internet banking do banco Bradesco, há uma contagem regressiva de 20 minutos, isso significa que após efetuar o login, você terá somente vinte minutos antes da sessão ser encerrada.

O tempo de vida de uma sessão é definido no arquivo php.ini com o comando: session.gc_maxlifetime = 1440, onde 1440 é o tempo de vida da sessão em segundos, ou seja, 24 minutos, então basta alterar esse valor, salvar as alterações e reiniciar o servidor web para modificar o tempo de vida das sessões.

Area restrita com Sessão no PHP: Script de Login

Esse nosso script de login com sessão PHP será composto por 5 aquivos .php, a saber:

1) index.php – arquivo principal onde há o formulário de login

<?php
session_start();

require("global.php");

$nome = get_post('nome');
$senha = get_post('senha');

$post_back = get_post('post_back');

if(!empty($post_back)) faz_login();

?>
<html>
<body>

<form id="form1" name="form1" method="post" action="index.php">
<p>Nome: <input type="text" name="nome" /></p>
<p>Senha: <input type="text" name="senha" /></p>

<input type="submit" name="post_back" id="button" value="Submit" />
</form>

</body>
</html>

Note que sempre que for trabalhar com sessões no PHP, é necessário iniciar a mesma com o comando session_start(), salvo caso o seu servidor web esteja configurado para iniciar as sessões automaticamente.

2) functions.php – Arquivo que contém funções que serão usadas em mais de uma página, possui a função get_post() e faz_login()

<?php
function get_post($var, $is_int=false, $default=""){
 if($is_int){
 return isset($_POST[$var])?(int)$_POST[$var]:$default;
 }else{
 return     isset($_POST[$var])?$_POST[$var]:$default;
 }
}

function faz_login(){
 global $usuarios, $nome, $senha;

 for($i=0;$i<count($usuarios);$i++){
 if($usuarios[$i][0] == $nome && $usuarios[$i][1] == $senha){
 $_SESSION["usuario"] = $i;
 header("Location: restrito.php");
 break;return;
 }
 }
 echo "<script>alert('login falhou')</script>";
}
?>

3) config.php – Arquivo de configurações, no nosso caso será utilizado para inserir os usuários do sistema com sessão

<?php

$usuarios = array();
$usuarios[] = array("pedro", "senhaxyz");
$usuarios[] = array("daniel", "123");

?>

4) global.php – Arquivo que inclui os arquivos (config.php e functions.php). Utilizar um arquivo que inclui todos os demais facilita nossa vida, ou seja, agora é só incluir o global.php invés de incluir todos os demais um por um.

<?php

require("config.php");
require("functions.php");

?>

5) restrito.php – é a area restrita do usuário, onde o conteúdo restrito ficaria.

<?php
session_start();

require("global.php");

if(!isset($_SESSION["usuario"])){
 header("Location: index.php");
 exit();
}

if(isset($_GET["sair"]) && $_GET["sair"] == true){
 session_destroy();
 header("Location: index.php");
 exit();
}

?>
<html>
<body>

<h2><?php echo "Bem vindo " . $usuarios[$_SESSION["usuario"]][0];?></h2>

<p>
<a href="restrito.php?sair=true">Sair do Sistema</a>
</p>

<p>
Conteúdo Restrito Aqui
</p>

</body>
</html>

Area restrita com Sessão no PHP: Quiz

Bem, creio que o código está bem intuitivo, mas caso tenham alguma dúvida sobre este sistema, não hesitem em perguntar qui nos comentários. Ah, antes de encerrar este artigo, veja um pequeno quiz:

a) Como inserir novos usuários nesse script?
Resposta: Para inserir usuários é muito simples, abra o arquivo config.php e insira uma nova linha com o seguinte código:

$usuarios[] = array(“Usuario”, “SENHA”);

Note que você deve substituir “Usuario” e “Senha” pelo nome e senha do novo usuário que desejas inserir. Para remover um usuário basta excluir a linha respectiva.

b) Quantos usuários eu posso ter nesse script?
Resposta: Não há limite de usuários, você pode inserir vários usuários editando o arquivo config.php

c) Posso criar mais páginas restritas?
Resposta: Sim, você pode criar inúmeras páginas restritas, porém ambas devem ser .php, e no topo da página você deve inserir o código:

session_start();

require("global.php");

if(!isset($_SESSION["usuario"])){
header("Location: index.php");
exit();
}

d) Tenho um servidor web asp, se eu instalar este script de login nele vai funcionar?
Resposta: Depende, há servidores que rodam ASP e PHP, o importante é saber se o teu host de hospedagem web suporta PHP ou não.

e) Como é feita a instalação deste script?
Resposta: Como é um script PHP simples, que não usa banco de dados, você pode simplesmente criar uma pasta chamada restrito e fazer o upload de todos as páginas PHP que compõem o sistema.

f) Já tenho um site, posso colocar junto com ele?
Resposta: Sim, porém siga os passos da resposta da pergunta e) logo acima.

g) Se mais tarde eu quiser trabalhar com banco de dados mysql, será possível?
Resposta: Sim, é possível, porém terá que fazer alterações no script, obviamente.

h) Estou com dúvidas sobre este script, como posso entrar em contato?
Resposta: Poste aqui nos comentários suas dúvidas, responderei assim que possível.

Area restrita com Sessão no PHP: Conclusão

Sempre quando o teu servidor web tiver recursos como banco de dados, o ideal é optar por um sistema com banco de dados. Veja o artigo que criei aqui no Profissionais Web onde mostro como criar um sistema de login com Banco de Dados no link: Area Restrita com Banco de Dados

Já quando não é possível utilizar banco de dados, essa idéia sugerida neste artigo pode ajudar, porém se você for adicionar e excluir usuários com frequência, ficar editando o arquivo php manualmente pode ser um tanto tedioso.

Até o próximo artigo aqui no Profissionais Web.

16 respostas a Area restrita com Sessão no PHP

  • E para redirecionar cada usuário para uma página específica? É possível?

  • É possível alterar a duração de uma sessão sem alterar o “php.ini”? Como?

  • não funcionou comigo. fiz do jeitinho que vc colocou aqui, mas quando clico em Submit só pisca a página. pode me ajudar? abs

    • Vanessa, você criou todos os arquivos .php? São 5 ao total e não é .html, mas .php. Além disso, o servidor web que você está testando o script, você tem certeza que ele roda PHP e que ele está trabalhando com sessão?

  • Ótima matéria…..sinceramente simples, fácil e muito funcional irá ajudar e muito as pessoas que não tem tanto conhecimento em php…

    Parabéns!!!

  • Thiago, sim é possível mesmo com esse script sem banco de dados redirecionar cada usuário para uma página específica. É um pouco trabalhoso fazer isso, e é muito mais prudente trabalhar com banco de dados, mas possível é sim.

    Por exemplo, na função fazer_login, em vez de redirecionar o usuário que fez login para restrito.php com header(“Location: restrito.php”), basta redirecionar para uma página específica, como restrito-pedro.php ou restrito-daniel.php. O trabalho seria criar todas as páginas de todos os usuários, sempre respeitando o prefixo restrito- seguido do nome de login do usuário.

    Feito esse trabalho, para a função fazer_login redirecionar para a página correta, no lugar de header(“Location: restrito.php”) coloque o seguinte: header(“Location: restrito-“.$usuarios[$i][0].”.php”)

    Além disso, por questão de segurança e privacidade, na pagina restrita de cada usuário deverá ser feita a verificação se a sessão “usuario” contém o id correto que corresponde a página atual. Isso é necessário por que se não um usuário que fez login poderia acessar as páginas de todos os outros usuários digitando o endereço das páginas deles no navegador web.

    Em suma, como você pode ter notado, é trabalho demais, e é melhor optar por trabalhar com banco de dados, onde a lógica muda completamente e o trabalho é bem menor.

  • é comum dar erro dar erro rodando localmente?
    line12
    line13
    line15

  • Gostei da tua explicação.
    Quero saber se da pra liberar o acesso mediante pagamento?
    Ao clicar em entrar abre a pagina do pagseguro para efetuar o pagamento, dando certo a pagina é aberta.
    É possível?
    Obrigado.

    • SIm, mas daí você vai precisar de uma integração pagseguro com o seu script.

      • Como isso é feito, tem algum exemplo para que eu possa estudar?
        Obrigado.

  • Olá.

    Não funcionou, sempre parece que o nome de usuario e senha estão errados ( não loga) mesmo estando certos, porque?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *