Palavra:   

Revista PHP / PHP

Flávia Jobstraibizer

Analista de sistemas, DBA Mysql, PostgreSQL, Oracle, SQLServer e Firebird. Desenvolvedora de sistemas, e administradora de servidores FreeBSD. Conheça o site www.flaviajobs.com.br

Trabalhando com sessões

Trabalhando com sessões

Vou falar um pouco sobre sessões. Tenho visto muitos tópicos nos fóruns onde respondo, e nas listas das quais participo, de pessoas com problemas pra entender como funcionam as sessões e como trabalhar com elas.

Primeiro acho que seria bom entender, o que são as famosas “sessions”.
Uma consulta rápida ao manual do PHP, já vai revelar algumas coisas: http://www.php.net/manual/pt_BR/ref.session.php

Pra resumir um pouco do que está sendo dito logo no começo dessa página do manual: As sessões são métodos de manter (ou preservar) determinados dados a mantê-los ativos enquanto o navegador do cliente (o internauta) estiver aberto, ou enquanto a sessão não expirar (por inatividade, ou porque em algum ponto você mandou que ela expirasse).

Pra começar a trabalhar com uma sessão, você precisa primeiro aprender uma coisa. Iniciar a sessão. Mesmo que você ainda não saiba o que vai colocar nela. Vamos por partes.

<?
session_start();
?>



O que você fez aí, foi indicar ao php, que você está iniciando um script, que poderá conter ou resgatar valores de sessão. Obrigatoriamente, esta deve ser SEMPRE a primeira linha do arquivo. (Salvos raros casos, de iframe, case switch, etc, ou então quando vc tem outros parametros de sessão sendo passados)
Veja mais descrições da função session_start(); aqui: http://www.php.net/manual/pt_BR/function.session-start.php
Um sessão, por padrão tem o TTL (time to live ou tempo de vida) de 180 minutos. Se você precisa por algum motivo que sua sessão expire em menor ou maior tempo, use a função http://www.php.net/manual/pt_BR/function.session-cache-expire.php

Então o código seria assim (partindo do principio que desejo expirar a sessão em 10 minutos):

<?
session_cache_expire(10);
session_start();
?>


Neste caso, session_cache_expire vem antes de session start. Porque primeiro ele avisa que a sessão, quando iniciada, deve expirar em 10 minutos, e depois a inicia.

Registrando uma sessão:

Digamos que você quer manter algum dado na sessão, para posterior uso.
Vamos para um exemplo prático.
Você tem um banner seu, divulgado em algum site. Via get ou mesmo post, é passado um parametro pra você.
Vejamos, o link do banner, seria: http://www.nomedoseusite.com.br?parceiro=ibest
Você sabe que quem clicou no seu banner, veio do site Ibest, correto?

Vamos gravar isso na sessão.

session_start();
$parceiro = $_GET['parceiro']; $_SESSION['Parceiro'] = $parceiro;
// aqui, podems imprimir o que gravamos na sessão!
echo "Você acessou no site através do '".$_SESSION['Parceiro']."' ";


Tendo acesso à dados como estes, você pode reuni-los através de passagem de parâmetros de sessão entre as páginas, e gravar num banco por exemplo, afim de ter um relatório de acessos, ou mesmo manipular dados específicos para cada cliente.
Agora digamos que o mesmo cliente continuava navegando no Ibest, viu outro banner seu, e clicou.
Ao invés de registrarmos duas sessões para ele, vamos ver se a sessão dele já está ativa. Se já estiver, manterá. Senão, se a sessão anterior já tiver expirado, registraremos novamente.

session_start();
// pegando o parceiro via get
$parceiro = $_GET['parceiro'];

// isset verifica se a sessão chamada Parceiro já existe
if(isset($_SESSION['Parceiro'])) {
echo "Você acessou no site através do '".$_SESSION['Parceiro']."' ";
}else{
$_SESSION['Parceiro'] = $parceiro;
echo "Você acessou no site através do '".$_SESSION['Parceiro']."' "; }


Deu pra notar?
Verifiquei se a sessão Parceiro existe. Se existe, simplesmente imprime que o cliente acessou o site através do Ibest. Se não existe (pode ser que tenha expirado, o cliente fechou o navegador anterior, etc.), registra a sessão e imprime que ele veio do Ibest.
Simples, não?

Destruindo uma sessão:

Agora que você sabe como registrar, expirar, verificar se existe, vamos destuir uma sessão.
Por algum motivo, você quer que ao clicar em um determinado link, ou efetuar alguma tarefa no site, o cliente deixe de ver aquela mensagem de que veio do Ibest.
Então, vamos simplesmente pegar a sessão ativa e informar ao script que queremos que ela seja "destruída"

$_SESSION['Parceiro'] = NULL;
unset($_SESSION['Parceiro']);


A função unset (http://www.php.net/manual/pt_BR/function.unset.php) é a responsável por "destruir" a sessão, que no caso chamamos de Parceiro.

Mais adiante, pretendo mostrar como criar sistemas baseado em sessões, e manipular dados de sessão para gerar relatórios, etc.
Dúvidas: fjferr@gmail.com

Opções de Interação