Sessão PHP

Resumo : neste tutorial, você aprenderá como trabalhar com sessões PHP para preservar o estado do aplicativo da web nas páginas durante uma sessão.

Introdução às sessões PHP

O protocolo HTTP não tem estado. Por exemplo, quando você visita a página do produto product.php, o servidor web responde com a página:

Suponha que você clique no botão adicionar ao carrinho na product.phppágina e navegue até a cart.phppágina, o servidor web não saberá que você adicionou o produto ao carrinho.

Para persistir as informações nas páginas, o servidor web usa sessões. Neste exemplo, quando você clica no botão adicionar ao carrinho, o servidor web armazenará o produto no servidor.

Quando você visualiza a cart.phppágina, o servidor web obtém os produtos da sessão e os exibe na cart.phppágina:

Como funciona.

  • Primeiro, o navegador da web solicita a product.phppágina.
  • Segundo, o servidor web responde com o product.phpconteúdo da página.
  • Terceiro, você clica no botão Adicionar ao carrinho na product.phppágina. A página enviará uma solicitação HTTP (POST ou GET) ao servidor web. O servidor web valida o produto e gera um ID de sessão. Também cria um novo arquivo de texto no servidor para armazenar as informações relacionadas ao produto selecionado.
  • Quarto, o servidor web responde ao navegador com o PHPSESSIDcookie no cabeçalho de resposta. Se o navegador permitir cookies , ele salvará o PHPSESSIDcookie, que armazena o ID da sessão passado pelo servidor web.
  • Quinto, na solicitação subsequente, por exemplo, quando você visualiza a cart.phppágina, o navegador passa de PHPSESSIDvolta para o servidor web. Quando o servidor web vir o PHPSESSIDcookie, ele retomará a sessão com o ID de sessão armazenado no cookie.
  • Por fim, o servidor web retorna a página do carrinho com os produtos que você selecionou.

As sessões permitem armazenar dados no servidor web associado a um ID de sessão. Depois de criar uma sessão, o PHP envia um cookie que contém o ID da sessão para o navegador da web. Nas solicitações subsequentes, o navegador envia o cookie de identificação da sessão de volta ao servidor web para que o PHP possa recuperar os dados com base no ID da sessão.

Criando uma nova sessão

Para criar uma nova sessão, você chama a session_start()função:

<?php

session_start();Linguagem de código:  HTML, XML  ( xml )

Quando é session_start()executado pela primeira vez, o PHP gera um ID de sessão exclusivo e o passa para o navegador na forma de um cookie chamado PHPSESSID.

Se já existir uma sessão, o PHP verifica o PHPSESSIDcookie enviado pelo navegador, a  session_start()função irá retomar a sessão existente ao invés de criar uma nova.

Como o PHP envia o  PHPSESSIDcookie no cabeçalho da resposta HTTP, você precisa chamar a session_start()função antes de qualquer instrução que envie o conteúdo para o navegador da web.

Caso contrário, você receberá uma mensagem de aviso informando que o cabeçalho não pode ser modificado porque já foi enviado. Esta é uma mensagem de erro bem conhecida em PHP.

Onde o PHP armazena os dados da sessão

Por padrão, o PHP armazena dados de sessão em arquivos temporários no servidor web. Você pode encontrar a localização dos arquivos temporários usando a diretiva  session.save_pathno arquivo de configuração do PHP.

A ini_get()função retorna o valor da session.save_pathdiretiva:

<?php

echo ini_get('session.save_path');Linguagem de código:  HTML, XML  ( xml )

Ou você pode chamar a session_save_path()função:

<?php

echo session_save_path();Linguagem de código:  HTML, XML  ( xml )

Normalmente, os dados da sessão são armazenados na /tmppasta do servidor web, por exemplo, /xampp/tmp.

Acessando dados da sessão

Ao contrário dos cookies, você pode armazenar quaisquer dados na sessão. Para armazenar dados na sessão, você define a chave e o valor na $_SESSIONmatriz superglobal.

Por exemplo, no  index.phparquivo, você armazena a userstring e roleso array na sessão da seguinte forma:

<?php
	session_start();
	// store scalar value
	$_SESSION['user'] = 'admin';
	// store an array
	$_SESSION['roles'] = ['administrator', 'approver', 'editor'];
?>

<html>
<head>
    <title>PHP Session Demo</title>
</head>
<body>
    <a href="profile.php">Go to profile page</a>
</body>
</html>Linguagem de código:  HTML, XML  ( xml )

Como funciona:

  • Primeiro, crie uma nova sessão chamando a session_start()função.
  • Segundo, defina os dados da sessão com a chave usere rolespara o ‘admin’ e o array ['administrator', 'approver', 'editor].

O index.phpexibe um link que navega para a profile.phppágina. No profile.phparquivo, você pode acessar os dados da sessão da seguinte forma:

<?php session_start() ?>

<?php if (isset($_SESSION['user'])) : ?>
    <p>Welcome <?= $_SESSION['user'] ?></p>
<?php endif; ?>

<?php if (isset($_SESSION['roles'])) : ?>
    <p>Current roles:</p>
    <ul>
        <?php foreach ($_SESSION['roles'] as $role): ?>
            <li><?= $role ?></li>
        <?php endforeach; ?>
    </ul>
<?php endif; ?>Linguagem de código:  HTML, XML  ( xml )

Como funciona.

  • Primeiro, retome uma sessão existente criada no arquivo index.php.
  • Segundo, acessando os dados da sessão usando o $_SESSIONarray.

Excluindo os dados da sessão

Sempre que você fecha o navegador da web, o PHP exclui automaticamente a sessão. Às vezes, você deseja excluir explicitamente uma sessão, por exemplo, ao clicar no link de logout. Neste caso, você pode usar a session_destroy()função:

<?php

session_destroy();Linguagem de código:  HTML, XML  ( xml )

Isso  session_destroy()exclui todos os dados associados à sessão atual. No entanto, isso não desativa dados na  $_SESSIONmatriz e no cookie.

Para destruir completamente os dados da sessão, você precisa remover a configuração da variável no  $_SESSIONarray e remover o PHPSESSIDcookie assim:

<?php
session_start();

// remove cookie
if(isset($_COOKIE[session_name()])){
    setcookie(session_name(),'',time() - 3600, '/');
}

// unset data in $_SESSION
$_SESSION[] = array();

// destroy the session
session_destroy();Linguagem de código:  HTML, XML  ( xml )

Observe que usamos a session_name()função para obter o nome do cookie em vez de usar a extensão PHPSESSID. Isso ocorre porque o PHP permite trabalhar com múltiplas sessões com nomes diferentes no mesmo script.

Resumo

  • As sessões permitem que você persista dados em páginas de um aplicativo web.
  • Chame a session_start()função antes de qualquer instrução enviada ao navegador da Web para criar uma nova sessão ou retomar uma sessão existente.
  • Use a $_SESSIONmatriz superglobal para acessar os dados da sessão.
  • Chame a session_destroy()função para excluir completamente os dados da sessão.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *