Php

Php: Resolvendo Warning: session_start(): Cannot send session cache limiter – headers already sent

As vezes acontecem surpresas desagradáveis em criar um site php em windows e enviar para um servidor linux. Um erro me fez perder o sono: “Php: Resolvendo Warning: session_start(): Cannot send session cache limiter – headers already sent”.

Pesquisei na internet e descobri três possíveis soluções para o erro. A primeira que posto é a que resolveu meu problema.

Solução 01:

O meu código era:

 
<?php 

session_start();

ini_set('default_charset','UTF-8');
[...]

A mensagem de erro indica que já foram enviados os headers. Observe que antes de abrir a tag <?php havia uma linha em branco. A recomendação é que seja certificado que a tag php seja posicionada a esquerda e ao topo.

Ou seja, removi a linha em branco e erro corrigido!

Solução 02:

Codificação do arquivo deve ser utf-8 sem BOM. Muitas pessoas comentaram resolveram seu erro após converterem o arquivo para a codificação utf-8 sem BOM.

Para fazer isso, basta abrir o arquivo com o Notepad++ e clicar no menu Formatar > Converter para UTF-8 sem BOM. Salvar o arquivo e enviar ao servidor.

Solução 03:

Ativar o buffer de saída, dessa maneira você pode definir cookies, iniciar sessões a hora que bem entender (fonte).  Para isso use o código:

<?php 
ob_start();  
session_start();

Seja como for, meu erro foi resolvido com a primeira solução.

Anúncios
Padrão

38 comentários sobre “Php: Resolvendo Warning: session_start(): Cannot send session cache limiter – headers already sent

  1. Thais disse:

    Muito bom..

    No meu caso isso aconteceu porque eu usava um index.php que montava o site com o includes. A solução foi remover de todas as outras páginas e colocar session_start() direto no index.php…

  2. Guga disse:

    Para mim nenhuma solução funcionou separadamente, essa funcionou:

    Solução 4:

    Solução 1 + Solução 2 + o código abaixo:

    < ? php
    session_start();
    header('Content-type: text/html; charset=utf-8');

    *OBS: juntar a TAG php, pq o blog está bloqueando

    Valeu pela ajuda das soluções

  3. Ango disse:

    Resolvi da seguinte maneira:
    1) Adicionei “ob_start();” antes de session_start(), logo no começo da página e “ob_end_flush();” lá no final da página.
    2) Mandei o Ctrl + J no Dreamweaver, fui em “Title/Encoding” e no campo “Unicode Normalization Form” selecionei “None”. Minha opção de incluir assinatura BOM já estava desativada.

    Valeu galera!!! =D

  4. Cara, apanhei pra caramba pra arrumar esse erro. Tentei um milhão de alternativas além das 3 listadas aqui, tentei usar localStorage, SessionStorage, cokkies… e só consegui resolver alterando o arquivo php.ini o campo session.cache_limiter para public.

    session.cache_limiter =public

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s