Fechamento de sessão ao fechar o navegador em PHP

Código em PHP para fechar sessões quando se fecha o navegador.

Por Eugenia Bahit


Publicado em: 25/2/08
Valorize este artigo:
Introdução

Muito mais simples do que se imagina, é fazer com quem uma sessão expire de forma automática quando o usuário fechar o navegador.

À principio, vamos definir a que nos referimos com fechar o navegador.
O servidor entenderá que o usuário fechou o navegador quando já não se encontre visitando nenhuma das páginas de nosso site. Ou seja, se um usuário que para navegar nosso site abriu pelo menos 2 páginas em 2 janelas diferentes, o servidor considerará que fechou o navegador quando até a última janela for abandonada. Seja porque o usuário a fechou ou fora para outro site que não é o nosso.

Então, para que a sessão expire ao fechar o navegador, terá que por um lado, forçar ao php.ini a que propague a sessão somente em cookies e por outro lado, lhe atribuir a esta, uma duração zero.

Para forçar ao php.ini há duas formas: modificar o php.ini diretamente ou mudar os valores desde nosso script.

Opção 1

Configurar o arquivo de início de php (php.ini) em forma direta.

Se tiver acesso a este arquivo, terá que buscar e mudar o valor a:

session.use_trans_sid = 0
session.use_only_cookies = 1


Esta última, justamente será a que indicará que a sessão deve se propagar só através de cookies.

Opção 2

Mudar a configuração do php.ini através de nosso script php.

Esta opção consiste em forçar ao php.ini através de nosso script php (Nem todos os servidores têm habilitada esta opção. Se o servidor não for próprio, por via das dúvidas, consulte com seu provedor).

Para fazê-lo, utilizaremos a função ini_set()

ini_set("session.use_trans_sid","0");
ini_set("session.use_only_cookies","1");

Agora só restará, mudar o parâmetro de duração à cookie da sessão. Faremos isto em nosso script com a seguinte instrução:

session_set_cookie_params(0, "/", $HTTP_SERVER_VARS["HTTP_HOST"], 0); Com o qual estaremos indicando uma duração e 0 (zero) segundos. Isto significará que durará até que termine o script.

Por fim, chegamos ao código:

Fechamento de sessão ao fechar o navegador em PHP: módulo de controle de dados

Você verá refletidas as mudanças ao script anterior, indicadas em negritos. Estas mudanças serão também as que se apliquem ao módulo de segurança. De qualquer forma, exponho aqui os dois códigos.

<?
//se for necessário mudar a config. Do php.ini através de seu script
ini_set("session.use_only_cookies","1");
ini_set("session.use_trans_sid","0");

 
//vemos se o usuário e senha são válidos
if ($_POST["usuario"]=="miguel" && $_POST["senha"]=="qwerty"){
    //usuário e senha válidos
    session_name("loginUsuario");
    //atribuo um nome à sessão para poder salvar diferentes dados
   session_start();
    // inicio a sessão
   session_set_cookie_params(0, "/", $HTTP_SERVER_VARS["HTTP_HOST"], 0);
   //mudamos a duração à cookie da 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 a hora de início 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 ao fechar o navegador em PHP: módulo de controle de dados
Você verá refletidas as mudanças ao script anterior, indicados em negritos.

<?
//se for necessário mudar a config. do php.ini através de seu script
ini_set("session.use_only_cookies","1");
ini_set("session.use_trans_sid","0");


//iniciamos a sessão
session_name("loginUsuario");
session_start();
session_set_cookie_params(0, "/", $HTTP_SERVER_VARS["HTTP_HOST"], 0);
//mudamos a duração à cookie da sessão


//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 estiver 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 o usuário à pag. de autenticação
      //senão, atualizo a data da sessão
    }else {
    $_SESSION["ultimoAcesso"] = $agora;
   }
}
?>





Comentários do artigo
Foi enviado 1 comentário ao artigo
1 comentário não revisado
0 comentários revisados

Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato