Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Session

Srs, bom dia!

Após a publicação da aplicação em www.000webhost.com eu tive problemas com as sessions.

Eu tenho três arquivos, Index, Hader e Erros. O index é minha página inicial o header o cabeçalho HTML e Erros onde eu faço a impressão das mensagens de erros.

Dentro do meu index eu faço um require_once para o Header e depois para o Erro. Eu começo a trabalhar efetivamento com PHP e sessions apenas no arquivo de Erros, antes disso só tenho html.

Eu me deparei com o seguinte erro: "Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at"

A minha session_start() estava no arquivo de Erros. Eu consegui resolver mudando a session para o inicio do arquivo index. Mas estou sem compreender a solução. A session_start() deve vir antes de qualquer código HTML, CSS, PHP etc...?

Este erro só aconteceu quando eu publiquei o site, no meu ambiente local eu não tive essa dificuldade.

Index

<?php       
  session_start();        
  require_once('header.php');     
?>
  <body> 
    <table class="alert">
      <tbody>
        <?php require_once('erros-handling.php'); ?>    
      </tbody>
    </table>
    <form action="../../controllers/home/login.php" method="post">
      <div class="login-box">
        <div class="login-box-inside">
          <div class="login-box-label">Login de acesso</div>          
          <div class="input-email" id="input-email">
            <input type="email" name="email" value="<?=$field['email']?>" placeholder="Digite o seu email">  
          </div>
          <div class="input-password" id="input-password">
            <input type="password" name="password" value="<?=$field['password']?>" placeholder="Informe a sua senha ">  
          </div>
          <div class="buttons">                      
            <div class="chbx-password">
              <input type="checkbox" name="forgetfulPassword">Esqueci a senha
              <button type="submit" class="btn-login">Login</button>
            </div> 
          </div>          
          <div class="new-user">
            <a href="../user/new.php">Cadastro</a>
          </div>               
        </div>    
      </div>
    </form>  
  </body>
</html>

Header

<!DOCTYPE html>
<html>
  <head>
    <title>Index</title>
    <meta charset="utf-8">    
    <link rel="stylesheet" type="text/css" href="../css/style/reset.css">
    <link rel="stylesheet" type="text/css" href="../css/main.css">
    <link rel="stylesheet" type="text/css" href="../css/style/home/index.css">
    <link rel="stylesheet" type="text/css" href="../css/style/user/message.css">
  </head>

Erros

<?php    
  require_once('../../controllers/global/validation.php');
  require_once('../../controllers/global/session.php');  

  $field = array('email' =>"", 'password' => "");    

  array_key_exists('email', $_SESSION) ? 
    $field['email'] = $_SESSION['email'] : ""; 
     global_kill_session('email'); 

  array_key_exists('password', $_SESSION) ? 
    $field['password'] = $_SESSION['password'] :  "";   
     global_kill_session('password'); 

  if(array_key_exists('emptyField', $_SESSION)){
    global_kill_session('emptyField');    
    $erros = global_session_set_erro(); 
    foreach($erros as $erro): ?>        
      <tr>
        <td><?=$erro?></td>
      </tr>
<?php global_kill_session($erro);                                   
      endforeach;               
  }else if(array_key_exists('insertSuccess', $_SESSION)){
    $msg = global_session_show_msg('insertSuccess'); ?>
    <tr>
      <td><?=$msg?></td>
    </tr>    
<?php global_kill_session('insertSuccess'); 
  }else if(array_key_exists('noRecord', $_SESSION)){
    $msg = global_session_show_msg('noRecord'); ?>  
    <tr>
      <td><?=$msg?></td>
    </tr>    
<?php global_kill_session('noRecord'); 
  }elseif(array_key_exists('accessFails', $_SESSION)) {
    $msg = global_session_show_msg('accessFails'); ?>    
    <tr>
      <td><?=$msg?></td>
    </tr>
<?php global_kill_session('updateSuccess'); 
  }elseif(array_key_exists('updateSuccess', $_SESSION)) {
    $msg = global_session_show_msg('updateSuccess'); ?>    
    <tr>
      <td><?=$msg?></td>
    </tr>
<?php global_kill_session('updateSuccess'); } ?>

```

5 respostas

Verifica se tem algum espaço ou caractere invisível antes das tags de inicio do php

//veja se nao tem nenhum caractere especial ou espaço antes
<?php

Oi Tarcíso.

Não tem.

Cola o resto do erro aqui. No erro fala onde a saída de dados começa. Assim você saberá onde checar.

solução!

Leandro, boa tarde, tudo bem?

Você precisa iniciar a sessão PHP antes de qualquer output. Ou seja, deve-se iniciar antes de:

  • Retornar qualquer coisa para o HTML;
  • Antes de dar qualquer echo;
  • Antes de inserir qualquer HTML fora de blocos PHP.

Normalmente uma das primeiras coisas que deve-se fazer é iniciar a sessão.

Espero ter ajudado.

Grande abraço

Oi Marcelo!

Isso mesmo que eu gostaria de saber. Se a session deve ser iniciada antes de tudo.

Obrigado!