Jump to content


Photo

Perdendo Session


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

#1 Max William

Max William

    12 Horas

  • Usuários
  • 192 posts
  • Sexo:Masculino
  • Localidade:Maringá - Paraná

Posted 20/02/2010, 11:27

Bom galera,

Meu problema é simples meu session esta se perdendo, eu não sei porque.
abaixo segue o codigo.

Formulario:
	<form method="post" action="auth.php" name="login" class="search">
		<h2>Área do <span>cliente</span></h2>
		<label>seu email</label>
			<input name="email" type="text" id="name" />
			
		<label>sua senha</label>
			<input name="senha" type="password" id="password" />
			
		<p class="link_senha">esqueci minha senha</p>
		
		<input name="login" type="submit" id="login" value="login" title="Login" class="submit" />
		
		<p class="link_cadastrar"><a href="cadastro.php">cadastrar-se</a></p>
		
	</form>

Arquivo que valida os dados enviados e cria session.
auth.php
<?php
	require_once($_SERVER["DOCUMENT_ROOT"]."/framework/fw.php");
	
	# Verifico se existe um POST
	if(getenv("REQUEST_METHOD") == "POST")
	{
		# Anti-inject
		$email = anti_injection($_POST['email']);
		
		# Verifico se foi enviado login e senha
		if((isset($email)) AND !empty($email))
		{
			# Consulta para verificar se existe o email enviado
			$loginConsulta = mysql_query("SELECT id_usuario FROM pa3_usuario WHERE user_login='$email'");
			$loginContagem = mysql_num_rows($loginConsulta);
			
			if($loginContagem === 1) # E-mail enviado existe no banco de dados
			{
				# Anti-inject
				$senha = md5(anti_injection($_POST['senha']));
				
				if(!empty($senha)) # Verifico se foi enviado uma senha
				{
					# Consulta para verificar se a senha e o email enviado é verdadeiro
					$ksql = mysql_query("SELECT * FROM pa3_usuario WHERE user_login='$email' AND user_senha='$senha'");
					$csql = mysql_num_rows($ksql);
					
					if($csql === 1) # Senha & E-mail confirmados / Usuário Logado
					{
						session_start();
						
						$dsql = mysql_query("SELECT * FROM pa3_usuario WHERE user_login='$email' AND user_senha='$senha'");
						$fsql = mysql_fetch_array($dsql);
						
						$_SESSION["login"]["userid"]		= $fsql['id_usuario'];
						$_SESSION["login"]["email"] 		= $email;
						$_SESSION["login"]["senha"]  	= $senha;
						$_SESSION["login"]["acesso"] 	= $fsql['id_tipo'];

						header("Location:cliente.php");
					}
					else # Senha não bate com a cadastrada
					{
						header("Location:login.php?erro=3");
					}
				}
				else # Não foi enviado uma senha
				{
					echo 'Não foi enviado uma senha';
					header("Location:login.php?erro=2");
				}
			}
			else # E-mail digitado não existe no banco de dados
			{
				//echo 'E-mail digitado não existe no banco de dados';
				header("Location:login.php?erro=1");
			}
		}
		else # Não foi digitado nenhum dos campos
		{
			header("Location:index.php");
			//echo 'Não foi digitado nenhum dos campos';
		}
	}
?>

Aqui é o codigo que eu coloco nas paginas restritas
<?php
	# Verifico se existe todas as sessões obrigatorias
	if(isset($_SESSION["login"]["userid"]) AND isset($_SESSION["login"]["email"]) AND isset($_SESSION["login"]["senha"]) AND isset($_SESSION["login"]["acesso"]))
	{
		# Variáveis
		$userid = $_SESSION["login"]["userid"];
		$email 	= $_SESSION["login"]["email"];
		$senha 	= $_SESSION["login"]["senha"];
		$acesso = $_SESSION["login"]["acesso"];

		# Verifico se os dados do session existem no banco de dados
		$consulta = mysql_query("SELECT * FROM pa3_usuario WHERE id_usuario='$userid' AND user_login='$email' AND user_senha='$senha' AND id_tipo='$acesso'") or die(mysql_error());
		$validar = mysql_num_rows($consulta);
		
		# Valido o resultado da consulta
		if(isset($validar) && $validar > '0')
		{
			header("Location:cliente.php");
		}
		else
		{
			header("Location:index.php");
		}
	}
	else
	{
		header("Location:index.php");
	}


?>


Problema é que, ate o momento que ele grava o session no arquivo auth.php ele gravou corretamente tudo, sei disso pq dei um dump no session seguido de um exit antes de ele dar o header (que teoricamente era para ir pro cliente.php), so que ele perde o session quando da o header, ele direciona para cliente.php e la tenho arquivo seguro.php que verifica a sessão e tals ver se esta logado.. e como o session se perdeu ele volta pro index..

enfim, em outras palavras, ele grava o session no auth.php mas quando ele sai do arquivo a sessão se perde.

Edição feita por: Max William, 20/02/2010, 11:27.

Se eu lhe ajudei ;) Clique para agradecer!

#2 hostdesigner

hostdesigner

    Super Veterano

  • Usuários
  • 2910 posts
  • Sexo:Masculino
  • Localidade:Quirinópolis-GO
  • Interesses:Programação, Mulheres, Diversão, Mulheres, Música, Mulheres, Meu Carro, Mais mulheres, Internet, Outras Mulheres, Quase por último PAZ e por ultimo Outras Váááárias Mulheres...

Posted 20/02/2010, 12:41

@ MAX WILLIAM
Essa foi apenas falta de atenção mesmo...

Você não iniciou a sessão então ela simplesmente não foi armazenada, da forma como está a sessão é iniciada mas como não foi alocado espaço para armazena-la ela não é salva. Veja session_start

Falopa!

#3 Max William

Max William

    12 Horas

  • Usuários
  • 192 posts
  • Sexo:Masculino
  • Localidade:Maringá - Paraná

Posted 20/02/2010, 12:45

@hostdesigner,

Verdade, nada mais que um erro de atenção, eu realmente não estava iniciando a sessão nas páginas restritas.
Obrigado =)
Se eu lhe ajudei ;) Clique para agradecer!




1 user(s) are reading this topic

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

IPB Skin By Virteq