PHP - Sessões
Uma maneira alternativa de tornar os dados acessíveis em várias páginas de um site inteiro é usar uma sessão PHP.
Uma sessão cria um arquivo em um diretório temporário no servidor onde as variáveis de sessão registradas e seus valores são armazenados. Esses dados estarão disponíveis para todas as páginas do site durante essa visita.
A localização do arquivo temporário é determinada por uma configuração no php.ini arquivo chamado session.save_path. Antes de usar qualquer variável de sessão, certifique-se de configurar este caminho.
Quando uma sessão é iniciada seguindo coisas acontecem -
O PHP primeiro cria um identificador único para aquela sessão particular que é uma string aleatória de 32 números hexadecimais, como 3c7foj34c3jj973hjkop2fc937e3443.
Um cookie chamado PHPSESSID é enviado automaticamente ao computador do usuário para armazenar a string de identificação de sessão exclusiva.
Um arquivo é criado automaticamente no servidor no diretório temporário designado e leva o nome do identificador exclusivo prefixado por sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443.
Quando um script PHP deseja recuperar o valor de uma variável de sessão, o PHP obtém automaticamente a string identificadora de sessão exclusiva do cookie PHPSESSID e, em seguida, procura em seu diretório temporário pelo arquivo com esse nome e uma validação pode ser feita comparando os dois valores.
Uma sessão termina quando o usuário perde o navegador ou depois de sair do site, o servidor encerrará a sessão após um período de tempo predeterminado, normalmente 30 minutos de duração.
Iniciando uma Sessão PHP
Uma sessão de PHP é facilmente iniciada fazendo uma chamada para o session_start()function.This função primeiro verifica se uma sessão já foi iniciada e se nenhuma for iniciada, ela inicia uma. Recomenda-se fazer a chamada parasession_start() no início da página.
Variáveis de sessão são armazenadas em uma matriz associativa chamada $_SESSION[]. Essas variáveis podem ser acessadas durante o tempo de vida de uma sessão.
O exemplo a seguir inicia uma sessão e registra uma variável chamada counter que é incrementado cada vez que a página é visitada durante a sessão.
Fazer uso de isset() função para verificar se a variável de sessão já está definida ou não.
Coloque este código em um arquivo test.php e carregue esse arquivo várias vezes para ver o resultado -
<?php
session_start();
if( isset( $_SESSION['counter'] ) ) {
$_SESSION['counter'] += 1;
}else {
$_SESSION['counter'] = 1;
}
$msg = "You have visited this page ". $_SESSION['counter'];
$msg .= "in this session.";
?>
<html>
<head>
<title>Setting up a PHP session</title>
</head>
<body>
<?php echo ( $msg ); ?>
</body>
</html>
Isso produzirá o seguinte resultado -
You have visited this page 1in this session.
Destruindo uma Sessão PHP
Uma sessão de PHP pode ser destruída por session_destroy()função. Esta função não precisa de nenhum argumento e uma única chamada pode destruir todas as variáveis de sessão. Se você quiser destruir uma única variável de sessão, você pode usarunset() função para remover a definição de uma variável de sessão.
Aqui está o exemplo para cancelar a definição de uma única variável -
<?php
unset($_SESSION['counter']);
?>
Aqui está a chamada que irá destruir todas as variáveis de sessão -
<?php
session_destroy();
?>
Ativando Sessão Automática
Você não precisa chamar a função start_session () para iniciar uma sessão quando um usuário visita seu site se você pode definir session.auto_start variável para 1 em php.ini Arquivo.
Sessões sem cookies
Pode haver um caso em que um usuário não permita o armazenamento de cookies em sua máquina. Portanto, há outro método para enviar o ID da sessão ao navegador.
Como alternativa, você pode usar o SID constante que é definido se a sessão foi iniciada. Se o cliente não enviou um cookie de sessão apropriado, ele tem o formato session_name = session_id. Caso contrário, ele se expande para uma string vazia. Assim, você pode incorporá-lo incondicionalmente em URLs.
O exemplo a seguir demonstra como registrar uma variável e como vincular corretamente a outra página usando SID.
<?php
session_start();
if (isset($_SESSION['counter'])) {
$_SESSION['counter'] = 1;
}else {
$_SESSION['counter']++;
}
$msg = "You have visited this page ". $_SESSION['counter'];
$msg .= "in this session.";
echo ( $msg );
?>
<p>
To continue click following link <br />
<a href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>
Isso produzirá o seguinte resultado -
You have visited this page 1in this session.
To continue click following link
o htmlspecialchars() pode ser usado ao imprimir o SID para evitar ataques relacionados a XSS.