Jump to content


Photo

Sistema De Login


  • Faça o login para participar
16 replies to this topic

#1 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 02/12/2009, 10:15

Olá pessoal,

Estou tendo um problema no meu código....esta exibindo a seguinte msg.....pelos meus testes somente nos navegadores Opera e IE7 exibe o seguinte erro:


Warning
: session_register(): Cannot send session cookie - headers already sent by (output started at c:\arquivos de programas\easyphp1-7\www\pagina\include\topo.php:63) in c:\arquivos de programas\easyphp1-7\www\pagina\include\menu_lateral.php on line 33

Warning: session_register(): Cannot send session cache limiter - headers already sent (output started at c:\arquivos de programas\easyphp1-7\www\pagina\include\topo.php:63) in c:\arquivos de programas\easyphp1-7\www\pagina\include\menu_lateral.php on line 33


No Firefox, Safari e Google Chrome acesso normalmente.....

Bom.....tenho uma página - menu_lateral.php onde o mesmo possui uma área restrita - um formulário de login e senha.....estou usando include. Passo o menu_lateral e topo via include.....o código do menu_lateral segue abaixo:

?php		$pagina_restrita = "area_restrita/index.php";		include "include/conexao.php";			if(isset($_GET['msg']) && $_GET['msg'] != "") 	{ 	$mensagem = $_GET['msg'];	} else { 	$mensagem = base64_encode("<font face=\"Verdana\" size=\"2\"><b> </b></font>");	}	if($_SERVER['REQUEST_METHOD'] == "POST")	{ 					if(isset($_POST['login']) && isset($_POST['senha']))		{ 	$login = $_POST['login']; 	$senha = $_POST['senha']; 	$query = mysql_query("SELECT * FROM tbl_user WHERE login='$login' AND senha='$senha'") or die(mysql_error()); 	$rTestar = mysql_num_rows($query); 	$row = mysql_fetch_assoc($query); 	 	if($rTestar > '0')		 {		 session_register('nome'); 	session_register('login'); 	session_register('senha');		 session_register('email'); 	$_SESSION['email'] = $row['nome']; 	$_SESSION['login'] = $row['login']; 	$_SESSION['senha'] = $row['senha'];		 $_SESSION['email'] = $row['email'];		 								 						 	echo "<meta http-equiv=\"refresh\" content=\"0; URL=" . $pagina_restrita . "\">";		 		 		 $ponteiro = fopen ("info.txt", "w");		 fwrite($ponteiro, "$login");		 fclose ($ponteiro); 	exit;						 	 	} else { 	 	$mensagem = base64_encode("<font color=\"red\" size=\"1\"><b><img src=\"imagens/alerta.png\" align=\"absmiddle\">			 Caro(a) usuário(a),<br>			 Foi identificado um erro em seu acesso: USUÁRIO E/OU SENHA INVÁLIDOS.</b></font>"); 	} 	 	}}mysql_close($con);		?><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><link href="menu_lateral.css" rel="stylesheet" type="text/css" /><div id="menu_esquerda"><style type=text/css>		a:link 	{		color: #07519a; 		text-decoration: none;	}		a:active 	{		color: #07519a; 		text-decoration: none;	}		a:visited 	{		color: #07519a; 		text-decoration: none;	}			a:visited 	{		text-decoration: none;	}		a:hover 	{		color: #07519a; 		text-decoration: none;	}				body 	{		font: 11px verdana;	}		ul 	{		padding-right: 0px; 		padding-left: 0px; 		padding-bottom: 0px; 		margin: 0px; 		width:100%; 		padding-top: 0px; 		border-bottom: #C5D8E5 1px solid; 		list-style-type: none; 		margin-top:2px;	}		ul li 	{		background: #d9e7f2; 		position: relative;	}		li ul 	{		display: none;		background: #dfe5ef;		left: 100%; 		position: absolute;		top: 0px	}		ul li a 	{		border-right: #ffffff 0px solid;		padding-right: 5px;		border-top: #C5D8E5 1px solid;		display:block; 		padding-left: 5px; 		background: #dfe5ef; 		padding-bottom: 5px; 		margin: 0px; 		border-left: #fff 0px solid; 		color: #000000; 		padding-top: 5px; 		border-bottom: #C5D8E5; 		font-family: Verdana, Arial, Helvetica, sans-serif;		text-decoration: none;	}		ul li a:hover 	{		background-color: #d6e1eb;	}		* html ul li 	{		float: left;		height: 1%;	}		* html ul li a 	{		height: 1%; 	}		li:hover ul 	{		display: block;	}		li.over ul 	{		display: block; 		width:100px;	}		* html ul li 	{		float: left; 		height: 1%	}		* html ul li a 	{		height: 1%	}</style><script>startList = function() {if (document.all&&document.getElementById) {navRoot = document.getElementById("sub");for (i=0; i<navRoot.childNodes.length; i++) {node = navRoot.childNodes[i];if (node.nodeName=="li") {node.onmouseover=function() {this.className+=" over"; } node.onmouseout=function() { this.className=this.className.replace	(" over", ""); } } } }}window.onload=startList;</script><DIV align=right class="titulocor">  	<UL id=sub> <LI><A href="index.php"> <DIV align=right><SPAN class=style1>Home</SPAN></DIV> </A> <DIV align=right class="titulocor"> 	<UL id=sub> 	 <LI><A href="index.php?pagina=pessoal"> <DIV align=right><SPAN class=style1>Pessoal</SPAN></DIV> </A>  <LI><A href="index.php?pagina=relatorio"> <DIV align=right><SPAN class=style1>Relatório</SPAN></DIV> </A>  <LI><A href="index.php?pagina=organograma"> <DIV align=right><SPAN class=style1>Organograma  </SPAN></DIV> </A>  <LI><A href="index.php?pagina=contato"> <DIV align=right><SPAN class=style1>Contato</SPAN></DIV> </A></UL>  <DIV align=right class="titulocor"> 	 <span class="texto_menu">Área Restrita</SPAN></DIV> 	<BR>	<div class="login">		<form name="form" action="" method="post"><?php echo "<font face=\"Verdana\" size=\"2\"><b>" . base64_decode($mensagem) . "</b></font>"; ?><br /> 	 					Usuário:				<input class="textbox" name="login"><BR>				Senha: 				<input class="textbox" type="password" name="senha"><BR>				<input class="button" type="submit" value="Login" name="submit"> 		</form> 	</div>			<div class="endereco"><BR>	 <div align="center" class="titulo"></div> 	</DIV></DIV>



O código acima redireciona para uma página q pertence a área restrita - index.php, segue o codigo da mesma abaixo:

<!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>Área Restrita</title><link href="area_restrita.css" rel="stylesheet" type="text/css" /><link href="estilo_texto_paginas.css" rel="stylesheet" type="text/css" /><link href="menu_lateral.css" rel="stylesheet" type="text/css" /></head><body bgcolor="#f9f9f9"><div id="geral">		<div id="topo">		 <?php				require "include/topo.php";		 ?>		</div>		 	<div id="menu">		 <?php				require "include/menu_lateral.php"; 		 ?> 		</div> 	 			<div id="conteudo"> 		<?				$pagina = @$_GET["pagina"];				if(file_exists("$pagina.php"))				{					require("$pagina.php");				}															else 				{					if($pagina == '')					{						require("home.php");					} 					else 										{						require("../erro.php");					}				}			?> 	 </div> 	 	<div id="barra_end"></div>		<div id="rodape">Todos os direitos reservados.</div></div></body></html>


E quando me logar na área restrita pelo IE7 ou Opera me mostra o seguinte erro:


Warning
: session_register(): Cannot send session cookie - headers already sent by (output started at c:\arquivos de programas\easyphp1-7\www\pagina\include\topo.php:63) in c:\arquivos de programas\easyphp1-7\www\pagina\include\menu_lateral.php on line 33

Warning: session_register(): Cannot send session cache limiter - headers already sent (output started at c:\arquivos de programas\easyphp1-7\www\pagina\include\topo.php:63) in c:\arquivos de programas\easyphp1-7\www\pagina\include\menu_lateral.php on line 33

No Firefox, Safari e Google Chrome....é muito rápido mais percebo q ele passa por essa mgm tb porém acessa a área restrita........alguém pode me ajudar......



#2 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 02/12/2009, 11:41

Se você usa $_SESSION, você não pode usar session_register(), session_is_registered() e session_unregister().

Use session_start() para iniciar a sessão, lembrando que ela deve ser chamada antes de qualquer saída html.

Exemplo:

<?php

session_start();

echo 'saída html...';

$_SESSION['login'] = 'root';
$_SESSION['senha'] = 'pass';

?>

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#3 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 02/12/2009, 12:10

Se você usa $_SESSION, você não pode usar session_register(), session_is_registered() e session_unregister().

Use session_start() para iniciar a sessão, lembrando que ela deve ser chamada antes de qualquer saída html.

Exemplo:

<?php

session_start();

echo 'saída html...';

$_SESSION['login'] = 'root';
$_SESSION['senha'] = 'pass';

?>

(ok2)


o session_start(); eu coloco em qual página? no menu_lateral.php ...ou no index.php?

#4 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 02/12/2009, 12:14

Tem que colocar no inicio da index.php, pois o arquivo menu_lateral.php foi chamado depois de uma saída dada na index.php.

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#5 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 02/12/2009, 12:20

Tem que colocar no inicio da index.php, pois o arquivo menu_lateral.php foi chamado depois de uma saída dada na index.php.

(ok2)


certo...foi oq eu fiz......primeiro coloquei:

<?
session_start();
session_destroy();
?>

Deu o erro que postei....dps coloquei somente:

<?
session_start();
?>

Agora ele exibe somente o topo, a parte do menu_lateral e conteudo fica todo branco.....não esta sendo redirecionado para o index.php da área restrita.....o topo q ele exibe é do index.php que todo mundo visualiza......estranho...pq no firefoz, safari e google chrome eu acesso normal.....só no opera e IE7 q não......oq pode ser agora.....?

#6 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 02/12/2009, 12:24

<?
session_start();
session_destroy();
?>
Isso aí não faz sentido, você iniciou e destruiu. :P

<?
session_start();
?>
Certo, mas você editou o resto do seu código? Você retirou as funções de sessão que não precisa?
att,
Muller Dias
ex-administrador Fórum WMO

#7 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 02/12/2009, 12:29

<?
session_start();
session_destroy();
?>
Isso aí não faz sentido, você iniciou e destruiu. :P

<?
session_start();
?>
Certo, mas você editou o resto do seu código? Você retirou as funções de sessão que não precisa?


Vocês esta se referindo a qual função?
a estas abaixo?
session_register('nome'); 	session_register('login'); 	session_register('senha');		 session_register('email');


#8 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 02/12/2009, 12:31

Sim, você não pode usar session_register(), session_is_registered() e session_unregister().
att,
Muller Dias
ex-administrador Fórum WMO

#9 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 02/12/2009, 12:35

Sim, você não pode usar session_register(), session_is_registered() e session_unregister().


Sim eu retirei...mais continua exibindo só o topo......o resto tudo em branco......só no IE7 e Opera.....


Sim, você não pode usar session_register(), session_is_registered() e session_unregister().


Sim eu retirei...mais continua exibindo só o topo......o resto tudo em branco......só no IE7 e Opera.....


Só uma pergunta? Esse session_start deve estar no index.php da área restrita ou do index.php normal...que todos tem acesso?
<?
session_start();
?>

Uma outra pergunta...no menu_lateral.php não preciso colocar nenhum session? nem start nem destroy?

#10 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 02/12/2009, 12:52

Só uma pergunta? Esse session_start deve estar no index.php da área restrita ou do index.php normal...que todos tem acesso?

A index.php da área restrita é chamada dentro da index.php normal? Esse index.php normal dá alguma saída antes de chamar a index.php da área restrita?

Se for sim para ambas as perguntas, você deve chamar session_start() na index.php normal, claro. Veja onde você está dando saída, session_start() vem sempre antes de qualquer coisa.

Uma outra pergunta...no menu_lateral.php não preciso colocar nenhum session? nem start nem destroy?

session_start() se chama uma vez só.

Sobre a função session_destroy(), você sabe para que ela realmente serve? Não faz sentido querer chamar ela alí dentro.
att,
Muller Dias
ex-administrador Fórum WMO

#11 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 02/12/2009, 13:04

Só uma pergunta? Esse session_start deve estar no index.php da área restrita ou do index.php normal...que todos tem acesso?

A index.php da área restrita é chamada dentro da index.php normal? Esse index.php normal dá alguma saída antes de chamar a index.php da área restrita?

Se for sim para ambas as perguntas, você deve chamar session_start() na index.php normal, claro. Veja onde você está dando saída, session_start() vem sempre antes de qualquer coisa.

Uma outra pergunta...no menu_lateral.php não preciso colocar nenhum session? nem start nem destroy?

session_start() se chama uma vez só.

Sobre a função session_destroy(), você sabe para que ela realmente serve? Não faz sentido querer chamar ela alí dentro.



respondendo a sua pergunta sobre a minha pergunta acima...esta certo então oq eu fiz aqui.....o session_start(); esta no index.php normal.....
Agora sobre o session_destroy(); pelo q eu estudei.....o session_destroy(); ele encerra todos os dados assossiados a uma sessão atual.....não é isso? Se não for por favor me corrija....

Mais a página continua exibindo somente o topo....não esta sendo redirecionada para o index.php da area restrita.....veja se o jeito q fiz para redirecionar se esta correto.....acredito q sim ...afinal no firefox redireciona normalmente.....

#12 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 02/12/2009, 13:16

Tem um exit; alí no menu_lateral.php. Não seria essa a causa do problema?
att,
Muller Dias
ex-administrador Fórum WMO

#13 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 02/12/2009, 13:25

Tem um exit; alí no menu_lateral.php. Não seria essa a causa do problema?


1º- Minha resposta sobre o session_destroy...é isso msm?
2º- Qnd tiro o exit; ele nem loga....isso só acontece no IE7 e Opera.....

Oq eu faço.....?

#14 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 02/12/2009, 15:01

Já sei o que é...

Vou propor uma mudança geral no código. Daqui a pouco eu posto. ;)

-----------

A index do seu site tem que ser mais ou menos assim:

<?php
		
	include "include/conexao.php";
	$pagina_restrita = "area_restrita/index.php";
	
	
	if($_POST['submit'])
	{
		if($_POST['login'] && $_POST['senha'])
		{
			$login = $_POST['login'];
			$senha = $_POST['senha'];
			$query = mysql_query("SELECT * FROM tbl_user WHERE login='$login' AND senha='$senha'") or die(mysql_error());
			$rTestar = mysql_num_rows($query);
			$row = mysql_fetch_assoc($query);
				
			if($rTestar > 0)
			{
				session_start();
				$_SESSION['login'] = $row['login'];
				$_SESSION['senha'] = $row['senha'];
				$_SESSION['email'] = $row['email'];
				 
				header("Location: ". $pagina_restrita);
				exit;
			}
		}
	}
	
	mysql_close($con);
	
?>
<!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>Site</title>

<link href="area_restrita.css" rel="stylesheet" type="text/css" />
<link href="estilo_texto_paginas.css" rel="stylesheet" type="text/css" />
<link href="menu_lateral.css" rel="stylesheet" type="text/css" />

</head>

<body bgcolor="#f9f9f9">

<div id="geral">
	<div id="topo"><?php include "include/topo.php"; // Aqui puxa o topo do site ?></div>
	<div id="menu"><?php include "include/menu_lateral.php"; // Aqui puxa o formulário de login ?></div>


	<div id="conteudo">
	<?php	
		$pagina = @$_GET["pagina"];
	
		if(file_exists($pagina.".php"))
		{
			include $pagina.".php";
		}
		else 
		{
			if(!$pagina) include "home.php";
			else include "../erro.php";
		}	
	?>      
	</div>
        
	<div id="barra_end"></div>
	<div id="rodape">Todos os direitos reservados.</div>
</div>

</body>
</html>

O login é feito direto na index, se os dados estiverem corretos é feito um redirecionamento para area_restrita/index.php. Essa index da área restrita, você verifica se a sessão existe e exibe o conteúdo. Exemplo:

<?php

session_start();
if (!$_SESSION['login']) {
	echo 'Você não está logado.';
	exit;
}

?>
Você está logado, aqui vai o html da página restrita.

Já o arquivo menu_lateral.php não precisa ter nada programação, só código html mesmo.

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#15 Eu_Nana

Eu_Nana

    12 Horas

  • Usuários
  • 291 posts
  • Sexo:Feminino
  • Localidade:SP

Posted 02/12/2009, 15:23

Já sei o que é...

Vou propor uma mudança geral no código. Daqui a pouco eu posto. ;)

-----------

A index do seu site tem que ser mais ou menos assim:

<?php
		
	include "include/conexao.php";
	$pagina_restrita = "area_restrita/index.php";
	
	
	if($_POST['submit'])
	{
		if($_POST['login'] && $_POST['senha'])
		{
			$login = $_POST['login'];
			$senha = $_POST['senha'];
			$query = mysql_query("SELECT * FROM tbl_user WHERE login='$login' AND senha='$senha'") or die(mysql_error());
			$rTestar = mysql_num_rows($query);
			$row = mysql_fetch_assoc($query);
				
			if($rTestar > 0)
			{
				session_start();
				$_SESSION['login'] = $row['login'];
				$_SESSION['senha'] = $row['senha'];
				$_SESSION['email'] = $row['email'];
			 
				header("Location: ". $pagina_restrita);
				exit;
			}
		}
	}
	
	mysql_close($con);
	
?>
<!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>Site</title>

<link href="area_restrita.css" rel="stylesheet" type="text/css" />
<link href="estilo_texto_paginas.css" rel="stylesheet" type="text/css" />
<link href="menu_lateral.css" rel="stylesheet" type="text/css" />

</head>

<body bgcolor="#f9f9f9">

<div id="geral">
	<div id="topo"><?php include "include/topo.php"; // Aqui puxa o topo do site ?></div>
	<div id="menu"><?php include "include/menu_lateral.php"; // Aqui puxa o formulário de login ?></div>


	<div id="conteudo">
	<?php	
		$pagina = @$_GET["pagina"];
	
		if(file_exists($pagina.".php"))
		{
			include $pagina.".php";
		}
		else 
		{
			if(!$pagina) include "home.php";
			else include "../erro.php";
		}	
	?> 
	</div>
 
	<div id="barra_end"></div>
	<div id="rodape">Todos os direitos reservados.</div>
</div>

</body>
</html>

O login é feito direto na index, se os dados estiverem corretos é feito um redirecionamento para area_restrita/index.php. Essa index da área restrita, você verifica se a sessão existe e exibe o conteúdo. Exemplo:

<?php

session_start();
if (!$_SESSION['login']) {
	echo 'Você não está logado.';
	exit;
}

?>
Você está logado, aqui vai o html da página restrita.

Já o arquivo menu_lateral.php não precisa ter nada programação, só código html mesmo.

(ok2)


Deu certo.....mais eu estava exibindo um msg em vermelho logo acima do campo login...essa q segue:

$mensagem = base64_encode("<font color=\"red\" size=\"1\"><b><img src=\"imagens/alerta.png\" align=\"absmiddle\">Caro(a) usuário(a),<br>Foi identificado um erro em seu acesso: USUÁRIO E/OU SENHA INVÁLIDOS.</b></font>");

Passava ela da seguinte forma:

[codebox]
<div class="login">
<form name="form" action="" method="post"><?php echo "<font face=\"Verdana\" size=\"2\"><b>" . base64_decode($mensagem) . "</b></font>"; ?><br />


Usuário:
<input class="textbox" name="login"><BR>
Senha:
<input class="textbox" type="password" name="senha"><BR>
<input class="button" type="submit" value="Login" name="submit">
</form>

</div>
[codebox]

Agora se eu digito senha errada..ele não exibe nenhuma msg....alerta.....tem como eu colocar essa msg de novo?




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq