Ir para conteúdo

POWERED BY:

Arquivado

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

Marcos Barbosa

[Resolvido] Erro na $_SESSION

Recommended Posts

Pessoal, tenho uma rotina de login e quando faço o teste local, funciona certinho, mas quando mando para o servidor da erro, abaixo segue a rotina e o erro:

<?php require_once('Connections/painel_config.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 if (PHP_VERSION < 6) {
   $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
 }

 $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

 switch ($theType) {
   case "text":
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
     break;    
   case "long":
   case "int":
     $theValue = ($theValue != "") ? intval($theValue) : "NULL";
     break;
   case "double":
     $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
     break;
   case "date":
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
     break;
   case "defined":
     $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
     break;
 }
 return $theValue;
}
}
?>
<?php
if (!isset($_SESSION)) {
 session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
 $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['usuario'])) {
 $loginUsername=$_POST['usuario'];
 $password=md5($_POST['senha']);
 $MM_fldUserAuthorization = "usuarioNivel";
 $MM_redirectLoginSuccess = "admin/painel.php";
 $MM_redirectLoginFailed = "admin/erro.php";
 $MM_redirecttoReferrer = false;
 mysql_select_db($database_painel_config, $painel_config);

 $LoginRS__query=sprintf("SELECT emailCliente, senhaCliente, usuarioNivel FROM ms_clientes WHERE emailCliente=%s AND senhaCliente=%s",
 GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 

 $LoginRS = mysql_query($LoginRS__query, $painel_config) or die(mysql_error());
 $loginFoundUser = mysql_num_rows($LoginRS);
 if ($loginFoundUser) {

   $loginStrGroup  = mysql_result($LoginRS,0,'usuarioNivel');

if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
   //declare two session variables and assign them
   $_SESSION['MM_Username'] = $loginUsername;
   $_SESSION['MM_UserGroup'] = $loginStrGroup;	      

   if (isset($_SESSION['PrevUrl']) && false) {
     $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];	
   }
   header("Location: " . $MM_redirectLoginSuccess );
 }
 else {
   header("Location: ". $MM_redirectLoginFailed );
 }
}
?>

O erro é:Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/portalno/public_html/header.php:1) in /home/portalno/public_html/header.php on line 36

 

A linha 36 é onde verifico se existe uma sessão...

if (!isset($_SESSION)) {
 session_start(); -> linha 36
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se o arquivo painel_config.php não possui impressão de tela, outra coisa é salvar o arquivo com a codificação UTF-8(sem BOM)

Compartilhar este post


Link para o post
Compartilhar em outros sites

adiciona essa linha:

ob_start()

 

No início do seu arquivo principal, antes de qualquer include.

 

E é recomendado esta linha também, mas ao final de tudo.

ob_end_flush();

 

Este problema é porque você está tendo alguma saida em HTML antes do inicio da sessão.

 

com ob_start você grava tudo na memória antes de exibir.

http://php.net/manual/pt_BR/function.ob-start.php

 

E só depois exibe.

 

DICA MUITO BOA

 

Ele é muito bom se quiser fazer até alterações na saida html, muito bom, já salvou minha pele.

 

Por exemplo, quando chamo funções em classes para trazer informações sobre um produto, essas informações ficam alocadas no meio do conteudo.

 

Para fazer um trabalho de SEO alterando o titulo conforme a postagem eu não conseguiria pela forma de leitura padrão.

 

<html>
<head>
<title>Titulo do Site</title>
</head>
<body>

<? 
$NOTICIA = $NEWS->post( $_GET['id'] ) ;
echo $NOTICIA['titulo'];
echo $NOTICIA['post'];
?>

</body>
</html>

 

 

A não ser que buscasse estas informações antes de todo o HTML.

 

 

<?
$NOTICIA = $NEWS->post( $_GET['id'] ) ;
?>
<html>
<head>
<title><?=$NOTICIA['titulo']?></title>
</head>
<body>

<? 
echo $NOTICIA['titulo'];
echo $NOTICIA['post'];
?>

</body>
</html>

 

 

Mas nem sempre isso é possível, como meu caso em que criei um sistema de templates para facilitar meu trabalho.

 

Se não fosse o ob_start a solução que eu teria seria somente essa.

 

 

?>
<html>
<head>
<title>
<?
$NOTICIA = $NEWS->post( $_GET['id'] ) ;
$NOTICIA['titulo']
?>
</title>
</head>
<body>

<? 
$NOTICIA = $NEWS->post( $_GET['id'] ) ;
echo $NOTICIA['titulo'];
echo $NOTICIA['post'];
?>

</body>
</html>

 

Ou seja fazendo duas vezes a mesma busca.

 

Mas graças a ele tenho toda a saida html em uma variavel.

 

Dai deixo o valor de titulo algo único na página.

 

?>
<html>
<head>
<title>[%Titulo%]</title>
</head>
<body>

<? 
$NOTICIA = $NEWS->post( $_GET['id'] ) ;
echo $NOTICIA['titulo'];
echo $NOTICIA['post'];
?>

</body>
</html>

 

E só dou um str_replace com uma função para substituir o [%Titulo%] pelo valor $NOTICIA['titulo'] que só entra no meio da notícia.

Ex. no link do ob_start: http://php.net/manual/pt_BR/function.ob-start.php

 

Dessa forma tenho a saida que quero.

 

Sem duas consultas e sem dar muita volta no sistema.

 

=)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, por motivos de saúde, ñ tive como ver os post´s antes, mas seguir as orientações e coloco aki o resultado.

Obrigado.

 

VALEUUUU,

coloquei no index.php, antes do tudo, de tudo mesmo o ob_start();

e no proprio index.php, na ultima linha ob_end_flush();

 

Agora parece q tá funcionando bem...

Mais uma vez... VALEUUUU...

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.