Neste tutorial, você aprenderá como armazenar certos dados no servidor em uma base temporária usando uma sessão de PHP.
O que é uma sessão
Embora você possa armazenar dados usando cookies, existem alguns problemas de segurança a serem resolvidos. Uma vez que os cookies são armazenados no computador do usuário é possível que um invasor modifique facilmente o conteúdo do cookie para inserir dados potencialmente perigosos em seu aplicativo ou simplesmente roubar o cookie para fazer um acesso indevido a uma área restrita de um site por exemplo, ataque conhecido como Session hijacking.
Além disso, sempre que o navegador solicita um URL ao servidor, todos os dados do cookie de um site são enviados automaticamente ao servidor dentro da solicitação. Isso significa que se você armazenou 5 cookies no sistema do usuário, cada um com 4 KB, o navegador precisa carregar 20 KB de dados cada vez que o usuário visualiza uma página, o que pode afetar o desempenho do seu site.
Você pode resolver esses dois problemas; segurança e performance; usando a sessão de PHP. Uma sessão PHP armazena dados no servidor em vez do computador do usuário. Em um ambiente baseado em sessão, cada usuário é identificado por meio de um número exclusivo chamado identificador de sessão ou SID. Este ID de sessão exclusivo é usado para vincular cada usuário com suas próprias informações no servidor, como e-mails, postagens, etc.
Curiosidade: Os IDs de sessão são gerados aleatoriamente pelo mecanismo PHP, o que é quase impossível de adivinhar. Além disso, como os dados da sessão são armazenados no servidor, eles não precisam ser enviados com todas as solicitações do navegador.
Iniciando uma Sessão PHP
Antes de armazenar qualquer informação nas variáveis de sessão, você deve primeiro iniciar a sessão. Para iniciar uma nova sessão, basta chamar a função session_start()
do PHP . Isso criará uma nova sessão e gerará um ID de sessão exclusivo para o usuário.
O código PHP no exemplo abaixo simplesmente inicia uma nova sessão.
<?php // Iniciando uma sessão session_start(); ?>
A função session_start()
primeiro verifica se já existe uma sessão procurando a presença de um ID de sessão. Se encontrar uma, ou seja, se a sessão já tiver sido iniciada, ele configura as variáveis da sessão e, caso não encontre, inicia uma nova sessão criando um novo ID de sessão.
IMPORTANTE: Você deve chamar a função session_start()
no início da página, ou seja, antes de qualquer saída gerada pelo seu script no navegador, da mesma forma que você faz ao definir os cookies com a função setcookie()
.
Armazenamento e acesso aos dados da sessão
Você pode armazenar todos os dados da sua sessão como pares de valores-chave na matriz super global $_SESSION[]
. Os dados armazenados podem ser acessados durante o tempo de vida de uma sessão. Considere o seguinte script, que cria uma nova sessão e registra duas variáveis de sessão.
<?php // Iniciando uma sessão session_start(); // Guardando dados na sessão $_SESSION["nome"] = "Peter"; $_SESSION["sobrenome"] = "Parker"; ?>
Para acessar os dados da sessão que definimos em nosso exemplo anterior de qualquer outra página no mesmo domínio da web – simplesmente recrie a sessão chamando session_start()
e, em seguida, passe a chave correspondente para o array $_SESSION
.
<?php // Iniciando uma sessão session_start(); // Acessando os dados da sessão echo 'Hi, ' . $_SESSION["nome"] . ' ' . $_SESSION["sobrenome"]; ?>
O código PHP no exemplo acima produz a seguinte saída.
Oi Peter Parker
Destruindo uma Sessão
Se você deseja remover determinados dados da sessão, basta remover a chave correspondente da matriz $_SESSION
, conforme mostrado no exemplo a seguir:
<?php // Inicia a sessão session_start(); // Remove dados da sessão if(isset($_SESSION["lastname"])){ unset($_SESSION["lastname"]); } ?>
No entanto, para destruir uma sessão completamente, basta chamar a função session_destroy()
. Esta função não precisa de nenhum argumento e uma única chamada destrói todos os dados da sessão.
<?php // Inicia a sessão session_start(); // Destrói a sessão session_destroy(); ?>
IMPORTANTE: Antes de destruir uma sessão com a função session_destroy()
, você precisa primeiro recriar o ambiente da sessão usando um session_start()
, para que haja algo para destruir.
Cada sessão PHP tem um valor de tempo limite – uma duração, medida em segundos – que determina por quanto tempo uma sessão deve permanecer ativa na ausência de qualquer atividade do usuário. Você pode ajustar a duração do tempo limite alterando o valor da variável session.gc_maxlifetime
no arquivo de configuração do PHP ( php.ini
) do seu servidor de hospedagem.