Curso de PHP: Armazenando informações em sessão ($_SESSION)

No texto passado, expliquei como fazer o uso de cookies para armazenar informações. O problema maior no uso de cookies é que todas as informações ficam armazenadas na máquina do usuário, o que não oferece nenhuma garantia que a informação não será alterada sem o nosso controle.

Uma sessão utiliza, por padrão, um arquivo armazenado no servidor para guardar informações. Cada sessão tem um ID, que é passado para o usuário. Esse ID é a única ligação entre o usuário e o arquivo do servidor. Se o ID for perdido, o usuário perderá as informações e até poderá estar acessando informações de outro usuário. Por esse motivo, esse ID é armazenado em cookie ou passado via URL.

Quando passado via URL aumenta-se em muito o risco do roubo de sessão, que é uma falha de segurança muito comum, infelizmente. Porém, quando se armazena em cookie, o risco apesar de ser menor, não é estingüido. Para evitar esses riscos de segurança existem algumas práticas que será assunto de um novo post. O ponto importante aqui é que nem sempre usando sessões, você deixará de usar cookies.

Iniciando uma sessão

A sessão, quando utilizado cookies, deve ser inicializada antes de qualquer saída HTML, pois, o cookie com o ID da sessão deve ser enviado ao usuário.

O comando para iniciar uma sessão é o session_start(). Veja seu uso:

<?php
    session_start();

Armazenando um valor em uma variável de sessão:

<?php
    session_start();
    $_SESSION['nome'] = 'Edgar Ferreira da Silva';
?>

Salve essa página como criasessao.php. Veja que o uso da variável $_SESSION é o mesmo que o uso da variável $_COOKIE. O acesso é feito como um array.

Resgatando o valor de uma variável:

<?php
    session_start();
    echo $_SESSION['nome'];
?>

Salve esse arquivo como exibesessao.php. Pronto. A troca de informação está sendo feita. Passamos uma variável para outra página facilmente.

Destruindo a sessão:

<?php
    session_start();
    $_SESSION = array();
    if (isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time()-3600, '/');
    }

    session_destroy();
?>

Para ter certeza que destruímos a sessão e qualquer ligação á ela, primeiro limpamos o array $_SESSION. Depois, apagamos o cookie (se estiver sendo utilizado) que indica o ID da sessão. Depois utilizamos o session_destroy, que elimina qualquer associação com o arquivo no servidor.

No próximo POST, explicarei como usar as sessões de forma customizada.