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.
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.
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.
O nome do cookie da sessão pode ser encontrado através da instrução ini_get('session.name').
O envio do cookie é feito através da instrução setcookie(ini_get('session.name'),'valor');
A leitura do valor do cookie da sessão é feita através da variável $_COOKIE[ini_get('session.name')]
<?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'); ?>
<?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>'; } ?>
<?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 ?>
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á.
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.
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!).