Area restrita com Sessão no PHP

Area restrita com Sessão no PHP
4.53 (90.51%) 295 votes

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.

17 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?

  • Oi …estou comprando um domínio eu preciso de páginas restritas para usuários ..eu até sei fazer alguns códigos html mas na boa não entendo nada disso …não sei se isso se coloca numa simples janela html ou sei lá a onde …foi muito explicativo mas ainda está muito avançado pra mim por favor alguém poderia me ajudar ???

Deixe uma resposta

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