Criar Web, manuais e recursos para desenvolvimento web
Manuais
Programas
FAQS
Diretório
Comunidade
  Inicio > Manuais > Sistema de autenticação PHP
SEÇÕES
Manuais relacionados
+Sistema de autenticação PHP
Categorias
+PHP
+Scripts em PHP

Índice do Manual Sistema de autenticação PHP
+ Funcionamento do sistema de autenticação em PHP
+ Página inicial com o formulário de autenticação em PHP
+ Controle dos dados de autenticação em PHP
+ Camada de segurança em PHP
+ Arquivos da aplicação com acesso restringido em PHP
+ Sair da aplicação segura em PHP
+ Diferentes formas de fechar sessão em PHP
+ Fechamento de sessão ao fechar o navegador em PHP
+ Autenticação PHP para múltiplos usuários usando MySQL
+ Autenticar usuário e salvar uma cookie com PHP

Descrição dos capítulos

Parceiros
- CSS para Web Design
- S.O.S Designers
- Slackware-Brasil
- Crie seu Web site
- Oficina da Net


Diferentes formas de fechar sessão em PHP

Como fechar uma sessão autenticada corretamente, por inatividade ou por fechamento do navegador por parte do usuário.


Veremos como fechar a sessão do usuário quando:
  • O tempo de inatividade do usuário supere "x" quantidade de tempo (segundos, minutos, etc...).
  • O usuário feche o navegador e abandone por completo nosso site.
Fechamento de sessão por inatividade em PHP: módulo de controle de dados

Algo que pode parecer muito óbvio para uns e muito complexo para outros, mas que inegavelmente muitos de nós já nos perguntamos em algum momento: Como expirar uma sessão em PHP?

Agora veremos que simples é. Só temos que:
  • Criar uma nova sessão que salve uma data e hora
  • Comprovar em nossa camada de segurança o tempo transcorrido entre a sessão salva e a hora atual
  • Atualizar a sessão ou destruí-la segundo corresponda
O primeiro que devemos fazer então, é criar a nova seção e atribuir-lhe como valor, a hora atual. Faremos isto no momento que o usuário entra no sistema com seus dados de acesso.

<?
//vemos se o usuário e senha são válidos
if ($_POST["usuario"]=="miguel" && $_POST["senha"]=="qwerty"){
    //usuario e senha válidos
    session_name("loginUsuario");
    //atribui um nome à sessão para poder salvar diferentes dados
   session_start();
    // inicio l sessão
    $_SESSION["autenticado"]= "SI";
    //defino a sessão que demonstra que o usuário está autorizado
    $_SESSION["ultimoAcesso"]= date("Y-n-j H:i:s");
    //defino a data e hora de inicio de sessão em formato aaaa-mm-dd hh:mm:ss
    header ("Location: aplicacao.php");
}else {
    //se não existe lhe mando outra vez ao portal
    header("Location: index.php?errousuario=si");
}
?>


Fechamento de sessão por inatividade em PHP: módulo de segurança

O segundo passo, será comprovar o tempo transcorrido entre a data salva e a hora atual em nossa camada de segurança e atuar em conseqüência.

Para fazê-lo, teremos que realizar um cálculo muito simples:

    tempo transcorrido = (hora atual - data salva)

E logo, restará saber se o tempo transcorrido é maior, menor ou igual que o tempo de expiração da sessão (representado como "x"):

    se (tempo transcorrido >= x), atuo em conseqüência ao achado

Para efetuar estes cálculos utilizaremos como unidade de tempo o segundo. Em nosso exemplo, expiraremos a sessão, transcorridos 10 minutos de inatividade (onde: 10*60 = 600 segundos). Para efetuar estes cálculos e tomar como unidade de medida o segundo, será necessário converter as datas a segundos. Para isso, utilizaremos a função strtotime.

Portanto, calcularemos o tempo transcorrido (tempo transcorrido = (hora atual - data salva)) da seguinte maneira:

<?
//iniciamos a sessão
session_name("loginUsuario");
session_start();

//antes de fazer os cálculos, comprovo que o usuário está logado
//utilizamos o mesmo script que antes
if ($_SESSION["autenticado"] != "SI") {
    //se não está logado o envio à página de autenticação
    header("Location: index.php");
} else {
    //senão, calculamos o tempo transcorrido
    $dataSalva = $_SESSION["ultimoAcesso"];
    $agora = date("Y-n-j H:i:s");
    $tempo_transcorrido = (strtotime($agora)-strtotime($dataSalva));

    //comparamos o tempo transcorrido
     if($tempo_transcorrido >= 600) {
     //se passaram 10 minutos ou mais
      session_destroy(); // destruo a sessão
      header("Location: index.php"); //envio ao usuário à página de autenticação
      //senão, atualizo a data da sessão
    }else {
    $_SESSION["ultimoAcesso"] = $agora;
   }
}
?>

Autoria e outras referências sobre este artigo

Manuais relacionados com este artigo
Dentro de Sistema de autenticação PHP

Categorias relacionadas
Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo:
+ Entrar em PHP
+ Entrar em Scripts em PHP


Comentários dos visitantes
Os comentários dos visitantes são para ampliar a informação do artigo. Todos podem participar.
Acrescentar um comentário do artigo Acrescentar um comentário do artigo



Sobre nós | Copyright | Anuncie | Entrar em contato <criarweb>

Hospedado por Hostnet Hospedagem de Sites