Aldeia Numaboa - SESSION no PHP
Você está aqui: Home Informática Tutoriais e Programação PHP SESSION no PHP
(48 votos, média 4.04 de 5)
Atualização: Quinta, 12 Março 2009 21:52
Um problema que atormenta os programadores iniciantes e de nível intermediário é a transferência ou disponibilização de variáveis entre várias páginas. Na linguagem PHP costuma-se usar os métodos POST ou GET que, mesmo sendo bastante simples, ainda causam confusão. Imagine agora o tamanho da encrenca se quisermos disponibilizar dados que sejam exclusivos para cada um dos usuários. A tábua da salvação são as funções de gerenciamento do todo poderoso PHP :smile:
As funções para manipulação de sessões oferecidas pelo PHP permitem preservar dados ao longo de acessos subsequentes. Cada visitante que acessar seu site recebe uma identificação única chamada de ID de sessão. Esta ID pode ser armazenada num cookie na máquina do usuário ou ser propagada através da URL.
Uma vez criada, a sessão pode registrar variáveis que ficarão disponíveis no array $_SESSION, de escopo global, enquanto você não encerrar compulsoriamente a sessão ou se o tempo de vida da mesma não tiver se esgotado. Para "pilotar" sessões o PHP disponibiliza um arsenal de funções fáceis de serem aplicadas quando se entende o princípio do mecanismo SESSION.
Funções da SESSION
session_cache_expire -- Retorna quando o cache atual expira
session_cache_limiter -- Obtém e/ou define o limitador do cache atual
session_commit -- O mesmo que session_write_close()
session_decode -- Decodifica os dados da seção a partir de uma string codificada
session_destroy -- Destrói todos os dados registrados na sessão
session_encode -- Codifica os dados da seção numa string
session_get_cookie_params -- Obtém os parâmetros do cookie da sessão
session_id -- Obtém e/ou define a ID da sessão ativa
session_is_registered -- Verifica se uma variável global foi registrada
session_module_name -- Obtém e/ou define o módulo da sessão
session_name -- Obtém e/ou define o nome da sessão
session_regenerate_id -- Atualiza a ID da sessão substituindo-a por uma nova
session_register -- Registra uma ou mais variáveis globais
session_save_path -- Obtém e/ou define o caminho para salvar os dados da sessão/li>
session_set_cookie_params -- Define os parâmetros do cookie da sessão
session_set_save_handler -- Define funções de armazenamento da sessão em nível de usuário
session_start -- Inicializa os dados da sessão
session_unregister -- Cancela o registro de uma variável global da sessão
session_unset -- Libera todas as variáveis da sessão
session_write_close -- Escreve os dados da sessão e a encerra
Pode-se usar tanto a função session_start quanto a função session_register para iniciar uma sessão. A função session_register, por padrão, chama a função session_start para verificar se já há ou não uma sessão aberta: se não houver, uma nova sessão é inicializada; se houver, o trabalho continua na sessão que já está inicializada.
Esta sessão já está durando segundos.
Quando um usuário acessar esta página pela primeira vez, a instrução session_start inicializa uma nova sessão porque, para este usuário, ainda não existe uma sessão definida; se um usuário que já possui uma sessão acessar novamente esta página, então a sessão é apenas reativada.
:atencao: A instrução session_start (ou session_register) PRECISA ser chamada ANTES de qualquer saída HTML! É por este motivo que o código PHP precede o código HTML.
Logo em seguida são definidas as variáveis $conta e $inicio. A variável $conta recebe o valor inicial 1 e a variável $início guarda a data e a hora do primeiro acesso. Estas são registradas na sessão usando a função session_register.
:atencao: Observe que, para registrar uma variável, usa-se o nome da variável entre aspas, ou seja, "conta" ao invés de $conta.
Novos valores para variáveis da sessão podem ser registrados através da função session_register ou diretamente no array da sessão. Observe que o valor da variável "conta" é atualizado usando o segundo método (linha 13). Para acessar um dos elementos do array, utiliza-se o nome do mesmo ($_SESSION, que precisa ser escrito com letras maiúsculas!) com o nome do elemento entre aspas e entre colchetes (e não entre parênteses!).
Verificando a sua sessão
Quando você acessou esta página pela primeira vez, você abriu uma sessão só para você. O resultado é o seguinte:
Duração: 0 segundos
Se você recarregar esta página, o contador vai mostrar um acesso adicional e um tempo maior de duração da sua sessão. Experimente!
Mas qual é a vantagem de ciscar valores de variáveis de uma sessão para usá-los na mesma página? Eu diria que a vantagem é pouca ou quase zero. Acontece que, mesmo que o usuário que abriu a sessão troque de página, a sessão não é extinta, ou seja, as variáveis registradas continuam à nossa disposição. Melhor do que isto, não é preciso colocar estas variáveis e seus valores em campos escondidos (hidden) de formulários ou como parâmetros no endereço de links para transferi-las para outras páginas - as variáveis e seus valores ficam na retaguarda, gerenciadas pelo PHP, prontas para serem usadas quando for conveniente.
Como ciscar os valores? Ficando no exemplo dado, basta adicionar um
em qualquer ponto de qualquer outra página para obter os valores desejados. É aí que está o pulo do gato :smile:
:atencao: NÃO ESQUEÇA: todas as páginas que se referirem à sessão precisam chamar a função session_start() ANTES de qualquer saída HTML!