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.










