Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida no Ex. 2 da Aula 4 - Insegurança com cookie

Boa tarde estava executando os exercícios da aula 4 que fala sobre os cookies e session, porém ao executar as atividades a minha aplicação na parte de login parou de funcionar.

Eu logo ele fala que foi logado com sucesso mais ao tentar acessar o menu adiciona produto ele fala que eu não tenho acesso a esta funcionalidade é parece que a validação do login não funciona, alguém poderia me ajudar?

Index.php

<!DOCTYPE html>
<?php include "./head.php"; ?>


<?php
     if(isset($_GET["logout"]) && $_GET["logout"]==true) {
?>
    <p class="alert-danger">Deslogado com sucesso</p>
<?php }?>

<?php
if (isset($_GET["login"]) && $_GET["login"] ==TRUE) {
    ?>
<p class="alert-success">Logado com Sucesso !</p>
<?php } ?>

<?php
if (isset($_GET["login"]) && $_GET["login"] ==false) {
    ?>
    <p class="alert-danger">Login ou senha Inválidos !</p>
<?php } ?>

<?php if(isset($_GET["falhaDeSeguranca"])) {?>
    <p class="alert-danger">Você não tem acesso a esta funcionalidade!</p>
<?php } ?>

<h1 class="principal">Bem Vindo</h1>

<?php if(isset($_COOKIE["usuario_logado"])) {?>
    <p class="text-success">Você está Logado como <?=usuarioLogado()?>.<a href="logout.php">Deslogar</a></p>

    <?php } else {?>
    <h2>Login</h2>
    <form action="login.php" method="post">
    <table class="table">
        <tr>
            <td>Email</td>
            <td><input class="form-control" type="email" name="email"></td>
        </tr>
        <tr>
            <td>Senha</td>
            <td><input class="form-control" type="password" name="senha"></td>
        </tr>

        <tr>
            <td>
                <button type="submit" class="btn btn-primary">Login</button>
            </td>
        </tr>
    </table>
</form>
 <?php }?>

<?php
include "./foot.php";

login.php

<?php

include ("./conecta.php");
include ("./banco-usuario.php");
include ("./logica-usuario.php");

$usuario = buscaUsuario($conexao, $_POST["email"], $_POST["senha"]);

if ($usuario == null) {
    header("Location: index.php?login=0");
} else {
    logaUsuario($usuario["email"]);
    header("Location: index.php?login=1");
}
die();

logica-usuario.php

<?php
session_start();
function verificaUsuario(){
if(!usuarioEstaLogado()) {
  header("Location: index.php?falhaDeSeguranca=true");
  die();
    }
}

function usuarioEstaLogado(){
    return isset($_SESSION["usuario_logado"]);
}

function usuarioLogado(){
    return $_SESSION["usuario_logado"];
}

function logaUsuario($email){
    $_SESSION["usuario_logado"] = $email;
}
function logout(){
    session_destroy();
}
4 respostas

Pedro, coloca o código da página de adiciona produto.

adiciona-produto.php

<?php 
include "./head.php";
include './conecta.php';
include './banco-produto.php';
include './logica-usuario.php';
verificaUsuario();
?>

<?php
$nome = $_POST["nome"];
$preco = $_POST["preco"];
$descricao = $_POST["descricao"];
$categoria_id = $_POST["categoria_id"];

if (array_key_exists('usado', $_POST)) {
    $usado = "true";
} else {
    $usado = "false";
}

include './conecta.php';

if (insereProduto($conexao, $nome, $preco, $descricao, $categoria_id, $usado)) {
    ?>
    <p class="principal text-success">Produto <?=$nome;?>, R$<?=$preco;?> adicionado com sucesso!</p>
    <?php
} else {
    $msg = mysqli_error($conexao);
    ?>
    <p class="text-danger">Produto <?=$nome;?>, não foi adicionado :<?=msg;?></p>
<?php
}
$msg = mysqli_error($conexao);
?>
<?php include './foot.php';?>
solução!

Pedrão,

No seu logica-usuario.php quando você declara a função verificaUsuario, tá tudo correto.

Porém quando você foi para o index.php, você apenas disse que caso a variável falhaDeSeguranca esteja setada, o usuário não terá acesso a funcionalidade, ou seja, se for TRUE ele não tem acesso, porém se for FALSE ele tb não terá acesso, pois a variável ainda sim estará setada. Eis o seu código:

<?php if(isset($_GET["falhaDeSeguranca"])) {?>

Você não tem acesso a esta funcionalidade!

<?php } ?>

Eis o correto:

<?php if (isset($_GET['falhaDeSeguranca']) && $_GET['falhaDeSeguranca']=='true') { ?>

Você não tem acesso a essa funcionalidade!

<?php } ?>

Ou seja, aqui eu amarrei meu código dizendo que, caso a variável falhaDeSeguranca esteja setada e a mesma seja TRUE, eu alerto meu usuário. Caso ela seja false a condição não será atendida, significando assim que o usuário está logado, consequentemente ele terá acesso.

Espero ter ajudado! Abraços!

Obrigado!!! Falta de atenção minha Deu certo