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.