O erro PHP Warning: session start() Cannot send session cache limiter

De Wiki Integrator do Brasil
Ir para: navegação, pesquisa
Phppromo-2021.jpg




Este erro comum em iniciantes - e também em desenvolvedores mais experientes - que operam com o PHP em um nível de supressão de erros no desenvolvimento, tem uma indicativa clara no manual do próprio PHP, descrito no endereço http://php.net/manual/pt_BR/function.session-start.php. Neste endereço do manual do PHP, existem duas notas, reproduzidas abaixo em sequencia os trechos que lhe interessa:

Se você está usando sessões baseadas em cookie, você deve chamar session_start() antes de qualquer coisa ser exibida para o navegador.
A partir do PHP 4.3.3, usar session_start() quando a seção já tiver sido iniciada irá resultar em um erro de nível. E_NOTICE.


Tecnicamente falando, o problema que essas notas informam é exatamente de que, se houver um conteúdo antes de session_start(), mesmo que incluso (require, include), gerará o erro, devido ao ciclo de operações de cada function do PHP.
A function session_start() gera uma sessão baseada em uma variável transmitida via cabeçalho GET, ou em forma de COOKIE, que é enviada com o cabeçalho do HTML (<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> …). Como essa function cria e envia os headers(cabeçalhos), uma vez submetida as informações, o compilador do PHP não consegue mais iniciar a sessão, gerando o terrível WARNING.


Online, tal mensagem de erro não é suprimida em nossos servidores, como alerta aos seus usuários e programadores. Tal situação é um indicativo forte do que poderá vir a ocorrer em termos de problemas de comportamento do aplicativo. Inicialmente, o WARNING pode não lhe causar nada, mas comportamentos estranhos podem vir a ocorrer, como perda de sessão em alguma etapa do aplicativo (o usuário criou um carrinho de compras e no momento de salvar, a sessão desapareceu). Em um caso mais adiante, por exemplo, numa versão futura do PHP, esse WARNING poderá vir a ser considerado um FATAL ERROR. Isso forçará o desenvolvedor a modificar seu aplicativo, criando erros incompreensíveis ou até mesmo páginas em branco, sem falha alguma visível.

Para suprimir online, basta fazer os passos indicados no wiki da Integrator, clicando aqui. Porém, fique avisado que tal situação não corrige o problema, apenas o oculta dos usuários, que futuramente podem vir a ter problemas que não foram relatados anteriormente pelo desenvolvedor devido a supressão das falhas.



IMPORTANTE: O suporte da Integrator não realiza qualquer intervenção ou ensino técnico no desenvolvimento de aplicativos PHP antigos para correção da falha. Cabe ao desenvolvedor resolver o problema ou, em aplicativos OpenSource antigos, recomenda-se fortemente a atualização imediata de versão.