Jump to content

Warning: session_start() [function.session-start]: Cannot send session cache lim


JoaoPCarvalho
Go to solution Solved by JoaoPCarvalho,

Recommended Posts

Boas,

Estou a programar em php, mas está a aparecer o seguinte erro:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\valida\trataLogin.php:1) in C:\xampp\htdocs\valida\trataLogin.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\valida\trataLogin.php:1) in C:\xampp\htdocs\valida\trataLogin.php on line 24

Codigo:

index.php

<?php
if (!isset($_SESSION)){
  session_start();
}
?>
<?php require('funcoes.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=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<table width="600" border="1" align="center">
  <tr>
     <td><img src="logo.gif" width="600" height="130" /></td>
  </tr>
  <tr>
    <td>
    
   
    
    <?php if(!isset($_SESSION['MM_Username'])){
	?>
    <form id="form1" name="form1" method="POST" action="trataLogin.php">
      Nome:

        <input name="nome" type="text" id="nome" size="8" />
    
    Password: 

      <input name="password" type="password" id="password" size="8" />
    
      <input type="submit" name="button" id="button" value="Login" />

    </form>
    <?php
    }
else
echo $_SESSION['MM_Username'];?>
    
    
    </td>
  </tr>
  <tr>
    <td height="89"> </td>
  </tr>
  <tr>
    <td> </td>
  </tr>
</table>
</body>
</html>

trataLogin.php

<?php
if (!isset($_SESSION)){
  session_start();
}
?>
<?php require_once('Connections/web.php'); ?>
<?php require_once('funcoes.php');?>
<?php 
$nome = GetSQLValueString($_POST['nome'],"text","","");
$password = GetSQLValueString($_POST['password'],"text","","");
$query = "SELECT login FROM user WHERE login = $nome AND password = md5($password)";
mysql_select_db ($database_web);
$resultado = mysql_query ($query);
if(mysql_num_rows ($resultado) == 1)
{
$_SESSION['MM_Username']=$nome;
}
else
{

}
?>
<?php
header("location:.../valida");
?>

Estes ficheiros no Windows XP não dão o referido erro, mas no vista e no Windows 7 dão.

Alguém me pode ajudar.

Obrigado

Link to comment
Share on other sites

Cria um novo documento. Escreve lá:

<?php
if (!isset($_SESSION)){
  session_start();
}

E depois o resto do código. Sei que pode parecer estúpido, mas a mim já me aconteceu esse erro a passar de WAMP para XAMPP, e foi assim que resolvi o problema. 🙂

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Link to comment
Share on other sites

Verifica se não estás a guardar os ficheiros com a BOM (Byte Order Mark), isso pode gerar esse erro.

Se estiveres a usar o Dreamweaver, procura algures nas preferências, na secção respectiva á gravação de ficheiros (não te sei precisar exactamente onde, já não uso o Dreamweaver há algum tempo), a opção respectiva e desactiva-a.

Depois, tens de criar um novo ficheiro, copiar/colar o conteúdo do original, guardar por cima do original, e está feito. Este último passo poderá ser desnecessário em versões mais recentes do Dreamweaver, experimenta.

Se estiveres a usar outro programa, procura nas preferências por algo similar.

Existem também programas que removem automaticamente a BOM quando guardam um ficheiro, daí ser possível abrires o ficheiro noutro programa, voltares a guardar o ficheiro (mesmo sem nenhuma alteração real), e ele já funcionar.

Também é possível que a cópia entre computadores/sistemas operativos remova automaticamente a BOM (no entanto não confirmo essa hipótese, nunca experimentei), pode ser a causa de funcionar bem noutro computador/sistema operativo.

Nota "histórica": a BOM é constituída por 2 bytes logo no início de um ficheiro de texto guardado em UTF-8 (é opcional), e permite identificar, com o nome indica, a ordem dos bytes que compõem os caracteres. É invisível em editores de texto (excepto talvez em editores/sistemas operativos que não suportem UTF-8 e/ou a BOM), daí surgirem estes erros no PHP, que identifica os bytes e envia-os para o browser, como faria com quaisquer outros caracteres.

"Pensa positivo: tudo pode piorar"

Link to comment
Share on other sites

Não tem a ver com o servidor, tem a ver com a forma como deves de estar a guardar o ficheiro e/ou se estás a incluir esse ficheiro noutro onde já tenha sido laçado algum output.

como diz o jreis, e a meu ver bem, o problema deve-se ao estares a gravar o teu ficheiro como sendo UTF8, guardando a BOM Signature, que conta como sendo um caracteres no inicio do ficheiro.

"Quando eu for grande quero ser como o Celso"

Link to comment
Share on other sites

Já fiz essa alteração, o index.ph tinha o BOM desactivado, mas tanto o ficheiro funcoes.php como o ficheiro trataLogin.php tinham o BOM activado.

Agora o warning que aparece é o seguinte:

"Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\valida\funcoes.php:1) in C:\xampp\htdocs\valida\trataLogin.php on line 24"

Deixou de dar o erro na função session_start() para dar este.

a linha 24 conté o seguinte código:

22  ?>

23  <?php

24  header("location:.../valida");

25  ?>

Não vejo nada de mais neste código, está tudo bem

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.