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.