Ir para conteúdo

POWERED BY:

Arquivado

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

Marco Polo Viana

Validar sessão

Recommended Posts

Alterei os scripts e fiz da seguinte forma:

 

1 - index.php:

<form method="post" action="valida_login2.php">
		<p> 
		  <label>Login (E-mail)</label>
		  <input name="email_usr" id="email_usr" type="text" size="19" />
		  <label>Senha</label>
		  <input name="senha_usr" id="senha_usr"  type="password" size="19" />
		  <br /><br>
		  <input type="submit" class="button" value="Entrar" />
		  <br />
		  <br />
		  <a href="lembrete.php">Esqueci minha senha</a></p>			
</form>

2 - verifica_login.php:

<?php
session_start();
require_once('cnx_dao.php');

$email_usr = $_POST["email_usr"];
$senha_usr = md5($_POST["senha_usr"]);

$selec = "SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_S_EMAIL='$email_usr' AND C_USUARI_S_SENHA='$senha_usr'";
$exec = mysql_query($selec, $conn) or die(mysql_error());
$total = mysql_num_rows($exec);

if($total=="1") {
$_SESSION["email_usr"] = $email_usr;
$_SESSION["senha_usr"] = $senha_usr;

header("Location: index2.php");
} else {
echo "<script>alert('Usuário ou senha não reconhecidos.'); history.back() </script>";
}
?>

3 - index2.php:

<?php 
session_start();

require_once('cnx_dao.php');
require_once('valida_sessao2.php');

$email = $_SESSION["email_usr"];
$senha = $_SESSION["senha_usr"];

$dados_res = mysql_query($conn, "SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_S_EMAIL='$email' AND C_USUARI_S_SENHA='$senha'");
$dados = mysql_fetch_array($dados_res);
$nome_usr = $dados["C_USUARI_S_NOME"];
?>

4 - valida_sessao.php:

<?php
session_start();

if(($_SESSION["email_usr"]=="") OR ($_SESSION["senha_usr"]=="")) {
echo "<script>alert('Usuário não autenticado.'); history.back()</script>";

}
?>

E não loga, ele entra na validação da sessão e retorna ao login. Tem solução um simles login com validação de sessão em páginas restritas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifiquei e o erro parece estar na validação da sessão. Postei o esquema completinho. Queria ver se alguém conseguiu rodar ele.

cara, nao vai fazer diferença outra pessoa eecutar seu codigo ...

 

espero que você nao esteja esperando que alguem pegue seu codigo e resolva o problema por você ... <_<

 

se você seguir os passos que eu disse agente pode te ajudar a resolver o problema, mas tem que ter um esforço da sua parte ...

 

vou repetir:

 

realize o login corretamente e descubra em qual IF ele entra no arquivo que valida a sessao, assim nos poderemos saber se é na comparaçao de email que ta o problema, se e na busca, ou se nem entra nessa cadeia de ifs ...

apos esse passo resolveremos o problema pq saberemos QUAL é ... simples

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

Algum problema no arquivo abaixo de validar sessão a ser incluso em todas as páginas restritas? Ele não deixa validar:

<?php
session_start();
require_once('cnx_dao.php');

if(IsSet($_SESSION["id_usuario"]))
	$id_usuario = $_SESSION["id_usuario"];
if(IsSet($_SESSION["nome_usuario"]))
	$nome_usuario = $_SESSION["nome_usuario"];
if(IsSet($_SESSION["email_usuario"]))
	$email_usuario = $_SESSION["email_usuario"];

if(!(empty($id_usuario) || empty($nome_usuario) || empty($email_usuario)))
{  
	$resultado = mysql_query("SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_I_USUARIO='$id_usuario'");
	if(mysql_num_rows($resultado)==1)
	{
		if($email_usuario != mysql_result($resultado,0,"C_USUARI_S_EMAIL"))
		{
			unset ($_SESSION["id_usuario"]);
			unset ($_SESSION["nome_usuario"]);
			unset ($_SESSION["email_usuario"]);
			echo "<script>alert('Usuário ou Senha não reconhecidos.'); </script>";
			header("Location: index.php");
			exit;
		}
	}
	else
	{	
			unset ($_SESSION["id_usuario"]);
			unset ($_SESSION["nome_usuario"]);
			unset ($_SESSION["email_usuario"]);
			echo "<script>alert('Usuário ou Senha não reconhecidos.'); </script>";
			header("Location: index.php");
		exit;
	}
}
else
{
			unset ($_SESSION["id_usuario"]);
			unset ($_SESSION["nome_usuario"]);
			unset ($_SESSION["email_usuario"]);
			echo "<script>alert('Usuário ou Senha não reconhecidos.'); </script>";
			header("Location: index.php");
		exit;
}

mysql_close($conn);
?>

 

 

 

Tem algo errado?

Pra que tudo isso? simplifique este código!

 

e use

isset

padrão,

 

não

IsSet

Conselho não faça uso destes códigos do Juliano Niederauer

 

use somente como forma de estudo!!! muito fraco para o dia a dia sem falar outras coisas... conheço e sei da dor de cabeça que estes codigos da pra quem ta começando!!!!!!!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é isso mesmo ... agente estuda esses caras mas quando vai aplicar não funciona cara... putz.. quanto ao amigo que falou pra testar , o erro está na validação da sessão. ele faz o valida login certinho, mas quandoentra em index2 e chama o valida sessão não valida, sendo que $_SESSÎON traz o email..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é isso mesmo ... agente estuda esses caras mas quando vai aplicar não funciona cara... putz.. quanto ao amigo que falou pra testar , o erro está na validação da sessão. ele faz o valida login certinho, mas quandoentra em index2 e chama o valida sessão não valida, sendo que $_SESSÎON traz o email..

que o problema ta no arquivo que valida sessao acho que todo mundo ja sabe ... eu te mostrei como achar o problema no script dele ... massss

desisto :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu postei acima um esquema mais simplificado, não sei se você viu. O valida sessao tah assim:

<?php
session_start();

if(($_SESSION["email_usr"]=="") OR ($_SESSION["senha_usr"]=="")) {
echo "<script>alert('Usuário não autenticado.'); history.back()</script>";

}
?>

Logo só tem um if. e fiz o teste com echo $_SESSION e trouxe os valores certinho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho q consegui algo para ajudarem:

Fiz o código abaixo:

~
<?php
session_start();
require_once('cnx_dao.php');

$email_usr = $_POST["email_usr"];
$senha_usr = md5($_POST["senha_usr"]);

$selec = "SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_S_EMAIL='$email_usr' AND C_USUARI_S_SENHA='$senha_usr'";
$exec = mysql_query($selec, $conn) or die(mysql_error());
$total = mysql_num_rows($exec);

if($total=="1") {
$_SESSION["email_usr"] = $email_usr;
$_SESSION["senha_usr"] = $senha_usr;

header("Location: debuga.php");

} else {
echo "<script>alert('Usuário ou senha não reconhecidos.'); history.back() </script>";
}
?>
[code]

e no debuga.php o seguinte:
[code]
<?php 
session_start();
echo $_SESSION["email_usr"];
echo $_SESSION["senha_usr"];
?>

E traz branco.

 

Para saber se os dados em $_SESSION estão sendo gerados, coloquei no if :

echo $_SESSION["email_usr"];
echo $_SESSION["senha_usr"];

Como entrou no if e exibiu os dados da sessão o SQL tá certinho, mas não sei pq nao leva os dados para frente em debuga.php. Acho q ajudei a me ajudarem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, está caindo no if e mostrando sessão vazia conforme teste abaixo.

 

Valida sessão:

<?php 
session_start();
if( !isset($_SESSION["email_usr"]) && !isset($_SESSION["senha_usr"]) ) {
echo "Sessão vazia";
} else {
echo $_SESSION["email_usr"];
echo $_SESSION["senha_usr"];
}

?>

Sendo que na página de login a sessão existe e é mostrada:

<?php
session_start();
require_once('cnx_dao.php');

$email_usr = $_POST["email_usr"];
$senha_usr = md5($_POST["senha_usr"]);

$selec = "SELECT C_USUARI_I_USUARIO, C_USUARI_S_NOME, C_USUARI_S_EMAIL FROM C_USUARI WHERE C_USUARI_S_EMAIL='$email_usr' AND C_USUARI_S_SENHA='$senha_usr'";
$exec = mysql_query($selec, $conn) or die(mysql_error());
$total = mysql_num_rows($exec);

if($total=="1") {
$_SESSION["email_usr"] = $email_usr;
$_SESSION["senha_usr"] = $senha_usr;

echo $_SESSION["email_usr"];
echo $_SESSION["senha_usr"];

} else {
echo "Usuário ou senha não reconhecido.";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mano fiz o máximo que podia pra te ajudar

 

testei aqui e funciona perfeitamente, só não usei os mesmos nomes verifique

 

 

Valida)login

<?php
session_start();
require "cnx_dao.php";

$login = isset($_POST["email_usr"]) ? strip_tags($_POST["email_usr"]) : FALSE; 

$senha = isset($_POST["senha_usr"]) ? md5(trim($_POST["senha_usr"])) : FALSE;

if(!$login || !$senha) {
header("Location: ../pagina_de_login.php");
exit;
}

$SQL = "SELECT * FROM C_USUARI WHERE login = '".$login."' AND senha = '".$senha."'"; 

$result_id = @mysql_query($SQL) or die("Erro no banco de dados!");
if (mysql_numrows($result_id) != 1) die(header("Location: ../pagina_de_login.php"));

$dados = @mysql_fetch_array($result_id);

$_SESSION["email_usr"]   = $dados["email_usr"];
$_SESSION["senha_usr"] = $dados["senha_usr"];

header("Location: pagina_adm.php");
?>

verifica

<?php
// Verifica se existe os dados da sessão de login
if(!isset($_SESSION["email_usr"]) || !isset($_SESSION["senha_usr"]))
{
	// Usuário não logado! Redireciona para a página de login
	header("Location: ../pagina_de_login.php");
	exit;
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

Bastei parar o IIS e instalar o APACHE que a sessão passou a andar entre as páginas. Não sei pq o IIS estava zerando o conteúdo das sessões ou onde configura isso no IIS. Mas como com o apache resolveu, vamos em frente... inclusive com o apache deu problemas de case sensitive entre as tabelas no ysql e campos , sendo que nao alterei o collation.

 

Abs a todos e obrigado pela força.

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.