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.php
página e navegue até a cart.php
pá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.php
página, o servidor web obtém os produtos da sessão e os exibe na cart.php
página:
Como funciona.
- Primeiro, o navegador da web solicita a
product.php
página. - Segundo, o servidor web responde com o
product.php
conteúdo da página. - Terceiro, você clica no botão Adicionar ao carrinho na
product.php
pá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
PHPSESSID
cookie no cabeçalho de resposta. Se o navegador permitir cookies , ele salvará oPHPSESSID
cookie, que armazena o ID da sessão passado pelo servidor web. - Quinto, na solicitação subsequente, por exemplo, quando você visualiza a
cart.php
página, o navegador passa dePHPSESSID
volta para o servidor web. Quando o servidor web vir oPHPSESSID
cookie, 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 PHPSESSID
cookie 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 PHPSESSID
cookie 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_path
no arquivo de configuração do PHP.
A ini_get()
função retorna o valor da session.save_path
diretiva:
<?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 /tmp
pasta 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 $_SESSION
matriz superglobal.
Por exemplo, no index.php
arquivo, você armazena a user
string e roles
o 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
user
eroles
para o ‘admin’ e o array['administrator', 'approver', 'editor]
.
O index.php
exibe um link que navega para a profile.php
página. No profile.php
arquivo, 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
$_SESSION
array.
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 $_SESSION
matriz e no cookie.
Para destruir completamente os dados da sessão, você precisa remover a configuração da variável no $_SESSION
array e remover o PHPSESSID
cookie 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
$_SESSION
matriz superglobal para acessar os dados da sessão. - Chame a
session_destroy()
função para excluir completamente os dados da sessão.