Utilizando sessões (session) no PHP e o erro mais comum

Em sistemas WEB desenvolvidos em PHP é muito comum a utilização de Sessões para guardar informações relacionadas a navegação do usuário. A sessão pode funcionar como uma espécie de variável guardada na memória, um exemplo básico de sua utilização pode ser para controle de login, quando o usuário logar no sistema um valor é gravado na sessão e nas páginas protegidas do sistema você testa se o usuário esta logado ou não.

A sintaxe de uma sessão é simples

1
2
3
<?php
$_SESSION['logado'] = 1;
?>

Sempre que for utilizar sessão você precisa inicia-la, assim:

1
2
3
<?php
session_start();
?>

Um dos erros mais comuns que alguns programadores iniciantes costumam cometer é iniciar a sessão após uma saída para o navegador. O session_start() deve ser a primeira coisa que aparece na página porque a sessão faz parte do cabeçalho HTTP, e no protocolo HTTP após o envio de um cabeçalho de requisição não é possível incluir novas informações, assim se você enviar algo para o navegador antes do session_start(); o protocolo será enviado e quando iniciar a sessão ela não poderá ser adicionada o que causará o erro abaixo:

“Cannot send session cookie – headers already sent”

Uma solução para este problema é a utilização do ob_start(); que bufferiza a saída, eu prefiro planejar direitinho o sistema pois esta buffrerização torna o script mais lento, mas se sua necessidade exige, a sintaxe é:

1
2
3
4
5
6
<?php
ob_start();
echo "Ao emitir essa frase o cabaçalho HTTP é enviado mas a sessão será iniciada sem apresentar o erro";
session_start();
ob_end_flush();
?>

Se você gostou deste post, escreva um comentário e/ou cadastre-se em nosso feed.

Comentários

o ob_end_flush();
é no final do script?

No final da sua página.

Escreva um Comentário

(obrigatório)

(obrigatório)