Fusão de sessões PHP

Outubro 2017

Em geral, as sessões PHP são usadas para gerenciar a seção de um membro d umo site. É possível abrir uma mesma conta de usuário em vários computadores. No entanto, cada computador terá a sua sessão (a sessão é um cookie: um "tracer" enviado ao seu navegador). O código abaixo é uma "demonstração de funcionamento", naturalmente, alguns ajustes quanto à autenticação devem ser feitos durante a execução.

Para determinados usos, pode ser vantajoso usar uma sessão conjunta de vários computadores. Isso é o que me proponho a estudar aqui.


O funcionamento das sessões


As variáveis salvas em $ _SESSION [] são armazenadas no servidor da Web pela biblioteca do PHP. A pasta com os arquivos da sessão será especificada no arquivo php.ini (arquivo muito interessante). Seu nome é session.save_path e seu valor padrão é "/ tmp ". Para vincular esse arquivo ao navegador do cliente, um identificador é enviado a ele, na página que faz um session_start (), casos nenhum cookie tenha sido especificado. Durante o pedido de cada nova página, o cookie é enviado para o servidor, que irá identificar a sessão em questão e carregará a sessão $_SESSION em função disso.


O nome do cookie também é especificado no php.ini. O nome é session.name e o seu valor padrão é PHPSESSID.

O princípio da fusão


Como você adivinhou, o site só localiza uma sessão pelo valor do cookie passado pelo cliente. Se dois navegadores web apresentam o mesmo cookie de sessão, então estes dois navegadores vão dividir uma tabela $ _SESSION [].
Para isso, é preciso que a pessoa que iniciou a sessão em primeiro lugar, dê a sua identificação da sessão às pessoas que querem se conectar a ela. Por conseguinte, devemos prever uma visualização do valor do cookie de sessão
A pessoa que pretende se conectar deverá usar um formulário específico no qual ele passará o valor da sessão a ser comunicado. Durante o processamento do formulário, nós enviaremos este valor para um cookie de sessão que fabricamos nós mesmos.

A seguir, ambos os navegadores terão uma sessão conjunta.

Código PHP

Nome do cookie da sessão


O nome do cookie da sessão pode ser encontrado através da instrução ini_get('session.name').

Envio do cookie "home made"


O envio do cookie é feito através da instrução setcookie(ini_get('session.name'),'valor');

Leitura do valor do cookie da sessão


A leitura do valor do cookie da sessão é feita através da variável $_COOKIE[ini_get('session.name')]

Abertura da sessão tradicional


<?php 
session_start(); 
echo "php: ".ini_get('session.name').'<br />'; 
if (isset($_COOKIE[ini_get('session.name')])) 
{ 
 echo "cookie: ".$_COOKIE[ini_get('session.name')]; 
 $_SESSION['test']="OK!"; 
} 
else 
 header('Location: login.php'); 
?>

Formulário da fusão


<?php 
if (isset($_GET['cookie']))        //se o formulário foi preenchido 
{ 
    //geração do cookie de ligação da sessão 
    setcookie(ini_get('session.name'),$_GET['cookie']);     
    //página de validação 
    echo '<html><body><a href="validation.php">validação' 
            .$_GET['cookie'].'</a></body></html>'; 
} 
else 
{ 
    //formulário da fusão 
    echo '<html><body><form action=""> 
            <input name="cookie"/><input type="submit" /> 
            </form></body></html>'; 
} 
?>

Validation.php


<?php 
session_start(); 
echo "cookie: ".$_COOKIE[ini_get('session.name')]."<br/>"; 
echo "test: "; 
if (isset($_SESSION['test']))    //se a variável da sessão existir 
   echo $_SESSION['test'];        //a exibimos 
else                            //caso contrário 
   echo "ERRADO";                //alguma coisa saiu errada 
?>

Tentativas


Agora, você pode criar seus 3 arquivos no mesmo diretório. O nome do terceiro arquivo é o definido no link do 2 ° (validation.php).
Execute o primeiro arquivo, copie o valor da variável de sessão.
Em outro navegador (não em outra janela), abra o 2° arquivo. Cole o valor da variável de sessão no formulário e valide.
A terceira página mostra, no segundo navegador, o valor que foi definido no primeiro navegador!

Se você refizer a tentativa, especificando um valor incorreto, a variável não aparecerá.

Desvantagens


Alguns sites salvam na sessão alguns valores de acompanhamento do usuário através do site. Este uso de variáveis de sessão pode ser problemático.

Vantagens


Você pode interromper a sua sessão em um computador e, continuar exatamente de onde parou, em outro computador, sem usar um banco de dados.

Em um site de compras, por exemplo, vários usuários podem utilizar um "carrinho de compras" (como uma cesta, mas coletivo!).


Tradução feita por Lucia Maurity y Nouira
Artigo original publicado por Carlos-vialfa. Tradução feita por pintuda. Última modificação: 15 de junho de 2011 às 05:28 por pintuda.
Este documento, intitulado 'Fusão de sessões PHP', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.