Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mruoppolo

Problema com session

Recommended Posts

Olá galera, td bem??

 

Estou tendo o seguinte problema eu criei um sistema de login e senha para uma área restrita do meu site, mas esta dando um erro de session q eu não to conseguindo encontrar o motivo.

 

O erro é este aqui:

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/marcelom/public_html/producao/principal.php:1) in/home/marcelom/public_html/producao/principal.php on line 3

 

Os arquivos são os seguintes:

 

INDEX.PHP

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>:: Produção - Marcelo Melo ::</title>
</head>

<body>
<?php
	
	if(isset($_GET['erroLogin']) && $_GET['erroLogin'] == true){
	
		echo "<script language='javascript1.2'>alert('Este e-mail não esta cadastrado em nosso sistema!')</script>";
	
	}elseif(isset($_GET['erroSenha']) && $_GET['erroSenha'] == true){
	
		echo "<script language='javascript1.2'>alert('Esta senha não confere com o e-mail informado!')</script>";
	
	}elseif(isset($_GET['cadastroSucesso']) && $_GET['cadastroSucesso'] == true){
	
		echo "<script language='javascript1.2'>alert('Seu cadastro foi realizado com sucesso!')</script>";
	
	}elseif(isset($_GET['erroAcesso']) && $_GET['erroAcesso'] == true){
	
		echo "<script language='javascript1.2'>alert('Para ver esta página efetue login no sistema!')</script>";
	
	}
	
?>
	<p> </p>
	<p> </p>
	<p> </p>
	<table width="30%" border="0" align="center" cellpadding="5" cellspacing="5">
  <tr>
    <td align="center"><img src="../img/logo.jpg" width="314" height="123" /></td>
  </tr>
  <tr>
    <td align="center" class="red">Produção</td>
  </tr>
  <tr>
    <td><form id="form1" name="form1" method="post" action="logar-producao.php">
      <table width="100%" border="0" cellspacing="5" cellpadding="5">
        <tr>
          <td width="34%" align="center">E-Mail:</td>
          <td width="66%">
            <input name="login" type="text" id="login" size="40" /></td>
        </tr>
        <tr>
          <td align="center">Senha:</td>
          <td>
            <input name="senha" type="password" id="senha" size="40" /></td>
        </tr>
        <tr>
          <td align="center"><a href="recuperar-senha.php">
            <input type="submit" name="button" id="button" value="Acessar" />
          </a></td>
          <td align="center"><a href="recuperar-senha.php">Esqueceu sua Senha?</a></td>
          </tr>
      </table>
    </form></td>
  </tr>
</table>

</body>
</html>

LOGAR-PRODUCAO.PHP

<?php
session_start();

include("../includes/config/config1.php");

$login = $_POST['login'];
$senha = md5($_POST['senha']);

$procurar = mysql_query("SELECT * FROM tb_producao WHERE email_producao = '$login'") or die(mysql_error());

$contar = mysql_num_rows($procurar);

if($contar >= 1){
	
	$buscar_senha = mysql_query("SELECT * FROM tb_producao WHERE email_producao = '$login' AND senha_producao = '$senha'") or die(mysql_error());

	$contar_total = mysql_num_rows($buscar_senha);
	
	
	
	if($contar_total >= 1){
	
		$dado = mysql_fetch_assoc($buscar_senha) or die(mysql_error());
	
		$_SESSION['ativa'] = 1;
		$_SESSION['nome'] = $dado['nome_producao'];
		
		//header("Location: principal.php");
		
		echo "<script language='javascript' type='text/javascript'>
		window.location.href='principal.php';
		</script>";
		
		
	
	}else{
	
		//header("Location: index.php?erroSenha=true");
		
		echo "<script language='javascript' type='text/javascript'>
		window.location.href='index.php?erroSenha=true';
		</script>";
		
	}
}else{

	//header("Location: index.php?erroLogin=true");
	
	echo "<script language='javascript' type='text/javascript'>
		window.location.href='index.php?erroLogin=true';
		</script>";

}


?>

PRINCIPAL.PHP

<?php
include("../includes/config/config1.php");
session_start();

if(isset($_SESSION['ativa']))
{

	header("Location: index.php?erroAcesso=true");
	
	exit();
}




?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>:: Produção - Marcelo Melo ::</title>
</head>

<body>

	<p> </p>
	<table width="30%" border="0" align="center" cellpadding="5" cellspacing="5">
  <tr>
    <td align="center"><img src="../img/logo.jpg" width="314" height="123" /></td>
  </tr>
  <tr>
    <td align="center">Olá <?php echo $_SESSION['nome']; ?> | <a href="sair.php">Sair do Sistema</a></td>
  </tr>
  <tr>
    <td align="center"><strong>Arquivos para Download</strong></td>
  </tr>
  <?php
  
  		$buscar_arquivo = mysql_query("SELECT * FROM tb_arquivos");
		
		while($ln=mysql_fetch_assoc($buscar_arquivo)){
  
  ?>
  <tr>
    <td align="center"><a href="<?php echo $ln['link_arquivo']; ?>"><?php echo utf8_encode($ln['nome_arquivo']); ?></td>
  </tr>
  <?php }?>
</table>


</body>
</html>

Alguém ai tem alguma ideia do q pode ser??

 

Mto obrigado galera ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Thomas, é só a conexão com o banco de dados:

<?php

	$host = "localhost";
	$user = "root";
	$pass = "";
	$db_name = "marcelosite";
	
	$con = mysql_connect($host, $user, $pass) or die(mysql_error());
	
	$db = mysql_select_db($db_name, $con) or die(mysql_error());

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente colocar o session_start(); na primeira linha e que não contenha espaços na frente dele. Também verifique se o arquivo está sendo salvo como UTF8 SEM BOM no seu editor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifiquei Back-on, porém ta td certo, o q eu acho estranho é o seguinte, no meu wampserver funciona perfeitamente, porém eu coloquei em 2 hospedagens em 2 empresas diferentes e não funcionou em nenhuma delas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teste deletar esta linha:

if(isset($_SESSION['ativa']))
{

	header("Location: index.php?erroAcesso=true");
	
	exit();
}

E rodar, dependendo da versão do PHP, ele conflita o header com session.

 

Caso não funcione, o que indico é tentar remover linha por linha, ou até mesmo escrever um arquivo somente com a session:

<?php
session_start();
?>

E ir escrevendo o resto até ver onde conflita. É como ir fazendo um debug (y)

 

OBS: Tente também inicializar o ob_start() antes do session_start().

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei os 2 mas deu erro mesmo assim


espera este ob_start(). eu não tentei, calma ai eu vo tentar de novo


quando eu coloquei o ob_start() apareceu mais um erro:

 

Warning: Cannot modify header information - headers already sent by (output started at /home/marcelom/public_html/producao/principal.php:1) in /home/marcelom/public_html/producao/principal.php on line 7

Compartilhar este post


Link para o post
Compartilhar em outros sites

A line 7 se eu não me engano é esta aqui:

header("Location: index.php?erroAcesso=true");

remova o header e faça o teste novamente, porém, com a saída de buffer ob_start();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu removi o session_start(); do arquivo principal.php, porém isso esta errado, pq se eu não iniciei a sessão automaticamente a variavel $_SESSION['ativa'] não existe e se ela não existe ele deveria voltar para a index.php


também não funcionou, eu joguei a saída em javascript, mas tbm da o mesmo erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

tira qualquer include e bota o session_start acima de tudo.. tome cuidado com espaços em branco entre as tags php

 

e se seu script for somente php remova a tag ?> para evitar esses problemas

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema e a inicialização do session_start();

utilize o ob_start

 

e no final de todo o código

 

ob_end_flush();

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu principal

<?php
// incluindo o ob_start
ob_start();


include("../includes/config/config1.php");
session_start();

if(isset($_SESSION['ativa']))
{

	header("Location: index.php?erroAcesso=true");
	
	exit();
}




?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>:: Produção - Marcelo Melo ::</title>
</head>

<body>

	<p> </p>
	<table width="30%" border="0" align="center" cellpadding="5" cellspacing="5">
  <tr>
    <td align="center"><img src="../img/logo.jpg" width="314" height="123" /></td>
  </tr>
  <tr>
    <td align="center">Olá <?php echo $_SESSION['nome']; ?> | <a href="sair.php">Sair do Sistema</a></td>
  </tr>
  <tr>
    <td align="center"><strong>Arquivos para Download</strong></td>
  </tr>
  <?php
  
  		$buscar_arquivo = mysql_query("SELECT * FROM tb_arquivos");
		
		while($ln=mysql_fetch_assoc($buscar_arquivo)){
  
  ?>
  <tr>
    <td align="center"><a href="<?php echo $ln['link_arquivo']; ?>"><?php echo utf8_encode($ln['nome_arquivo']); ?></td>
  </tr>
  <?php }?>
</table>


</body>
</html>

<?php 
// incluindo o ob_end_flush();
ob_end_flush(); 
?>

coloque o resultado....

 

Se este posts lhe ajudou, coloque como resolvido e me der um ponto positivo de reputação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então agora deu um erro e sumiu o resto da página:

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/marcelom/public_html/producao/principal.php:1) in/home/marcelom/public_html/producao/principal.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at /home/marcelom/public_html/producao/principal.php:1) in /home/marcelom/public_html/producao/principal.php on line 12

Compartilhar este post


Link para o post
Compartilhar em outros sites

ob_start() irá pegar todos os dados de saída e guardar em buffer, e isso não é o seu problema.

 

Faça um debug

 

e no arquivo de php não feche as tags <?php ?>

 

deixe assim e uma linha vazia abaixo

<?php
$host = "localhost";
$user = "root";
$pass = "";
$db_name = "marcelosite";    
$con = mysql_connect($host, $user, $pass) or die(mysql_error());    
$db = mysql_select_db($db_name, $con) or die(mysql_error());
//Retire o comentário, mas deixe uma linha.

Pode ser ai o problema!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente isso, não entendi o motivo ma era isso ai mesmo ;) Valew \o/

 

Que bom que resolveu!

 

Só para explicar, se você fecha as tags, onde só tem código de php, e por acidente da um enter antes, este enter será enviado como cabeçalho desta forma:

echo '\n';
?>

causando um Cannot modify header information – headers already sent

 

Sem falar que alguns editores insere esta quebra de linha automaticamente ao salvar, da para ver isso quando se usa o sublime com uma extensão que mostra onde esta os espaços em branco.

 

 

Não fechar as tags é recomendável para php puro "classes, bibliotecas e etc". :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.