Sessions with PHP

Asked

Viewed 57 times

2

I made a session code in PHP for Login and is not working, do this error

ERR_TOO_MANY_REDIRECTS

Below follows the codes made.

<?php
require_once "functions_prototipo.php";
//require_once "navBar.php";
require_once "conexaoBD.php";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    try 
    {
        $usuario = '';
        $senha = '';
        $connecting = conectaAoBD();

        if(isset($_POST['login']) and $_POST["login"] != ''){
            $usuario = filtraEntradaForm($_POST["login"]);
        } else {
            throw new Exception ('Login invalido. Tente Novamente' . $connecting->error);
        }

        if(isset($_POST['senha']) and $_POST["senha"] != ''){
            $senha = filtraEntradaForm($_POST["senha"]);
        } else {
            throw new Exception ('Senha invalida. Tente Novamente'. $connecting->error);
        }

        //Chamando 
        //seguinte mano
        loginUsuario($usuario, $senha, $connecting);
    }

    catch (Exception $e)
    {
        http_response_code(400); 

        $msgErro = $e->getMessage();

        echo $msgErro;
    }

}?>

<?php
function filtraEntradaForm($data)
{
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

function loginUsuario($login, $senha, $mysqli)
{
  $SQL = "
      SELECT Login, Senha
      FROM usuario
      WHERE Login = ?
  ";

  $stmt = $mysqli->prepare($SQL);
  $stmt->bind_param('s', $login);
  $stmt->execute();
  $stmt->store_result();

  // PEGA OS CAMPOS DOS SELECTS E INSERE EX: SELECT DO ID vai salvar no $idUsuario
  $stmt->bind_result($loginSelect, $senhaSelect);
  //VAI RECEBER O RESULTADO DA CONSULTA
  $stmt->fetch();
  //SE RESULTADO FOR EXATAMENTE IGUAL A 1
  if ($stmt->num_rows == 1)
  {
      //COMPARA A SENHA Q TA VINDO DO MODAL COM A DO BD
    if ($senha == $senhaSelect)
    {
      // Senha correta

      // Armazena dados úteis para confirmação de login
      // em outros scripts PHP
        //SALVA OS DADOS Q VEIO DO BANCO EM VARIAVEIS DE SESSAO
      session_start();
      $_SESSION['senha'] = $senhaSelect;
      $_SESSION['login'] = $loginSelect;
      header("Location: faleConosco.php");
      // Sucesso no login
      return true;
    }
    else
    {
      // Senha incorreta
      return false;
    }
  }
  else
  {

    return false;
  }
}

function checkUsuarioLogado($mysqli)
{
  // SE VARIAVEL DE SESSAO USUARIO E DE SENHA TIVER COM ELEMENTOS NAO ENTRA NO IF
  if (!isset ($_SESSION['senha'], $_SESSION['login']));
    return false;

  //VARIAVEIS DO PHP RECEBE O VALOR DAS VARIAVEIS DE SESSAO FEITO NO SELECT DA FUNÇAO ANTERIOR E ARMAZENADO
  //PUDE PERCEBER AQ Q $idUsuario é NO NOSSO CASO O EMAIL os 2 CAMPOS DISPONIVEIS PARA LOGAR NA A.R (AREA RESTRITA)  $idUsuario = $_SESSION['idUsuario'];
  $newSenha = $_SESSION['loginString'];
  $newLogin = $_SESSION['login'];
  // VAI BUSCAR NO BANCO DE ACORDO COM A VARIAVEL $idUsuario no BIND_PARAM ABAIXO NO NOSSOCASO SERIA O EMAIL..
  $SQL = " SELECT SENHA 
    FROM Usuario
    WHERE Login = ?";

  $stmt = $mysqli->prepare($SQL);
  $stmt->bind_param('s', $newLogin);
  $stmt->execute();
  $stmt->store_result();

  if ($stmt->num_rows == 1)
  {
    $stmt->bind_result($senhaSelect2); //$senhaHash recebe o RESULTADO DO SELECT -SenhaHash-
    $stmt->fetch();
    session_start();

    //RECEBE O QUE VEIO DE $senhaHash
    $loginStringCheck = $senhaSelect2;

    //COMPARA COM A FUNçÃO Q VEIO DA FUNçÃO DE SESSAO
    if ($loginStringCheck == $loginString)
      return true;
  }

  return false;
}

function checkUsuarioLogadoOrDie($mysqli)
{
  if (!checkUsuarioLogado($mysqli))
  {
    $mysqli->close();
    header("Location: index.php");
    die();
  }
}
?>
  • HTML is as follows

    require_once "conexaoBD.php";
    require_once "functions_prototipo.php";
    require_once "prototipo.php";
    session_start();
    $mysqli = conectaAoBD();
    checkUsuarioLogadoOrDie($mysqli);
    
    ?>
    

  • Error seems to be clear: you are redirecting to a page that has another redirect and thus enters an infinite loop. Probably if the last code is from the file index.php, if the user is not logged in it will be redirected to index.php, if you have not logged in you will be redirected to index.php, which if you haven’t logged in will...

  • Yeah, that’s where I can’t identify the problem.

  • @Andersoncarloswoss, I managed to redirect correctly, but if I type the URL of the private page it opens normally, without having logged in. What can it be???

1 answer

1


Buddy, just take the semicolon off the function checkUsuarioLogado

function checkUsuarioLogado($mysqli)
{
  if (!isset ($_SESSION['senha'], $_SESSION['login'])); //Só tirar esse ponto e virgula
    return false;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.