Ir para conteúdo
mm_edilson

Abrir página somente se o usuário estiver logado

Recommended Posts

Olá. Tenho uma página de login, que salvei como index.php. Quando o usuário entra com login e senha corretos, a página redireciona para outra página, a index2.php. É uma página independente, não sendo viável no meu projeto colocá-la como um include na página principal.

Tudo funciona. Exceto que, se o usuário, sem logar, digitar o endereço completo da página, ou seja, www.meusite.com.br/index2.php, ela abre normalmente. Como fazer para que ela não abra, se não passar antes pela página de login?

Esta é minha página index.php:

</style>
<?php include('app/connection.php'); ?>
</head>
<body>

<div id="corpo">
<center><img src="app/img/logo.png" width="500" height="210"></center></div><BR>

    <div id="paginas">

    <?php 
    @session_start();
    include('valida_user.php');
    ?>
 </div>

Esta é a página valida_user.php

<?php 
        @session_start();
        if(isset($_POST['enviar'])){
            $usuario = $_POST['usuario'];
            $senha = $_POST['senha'];
            if($usuario ==''){echo "<h4>Por favor, insira um nome de usuário válido</h4>";
            }else if($senha ==''){echo "<h4>Por favor, insira sua senha</h4>";
        }else{
            $sql = "SELECT * FROM usuarios WHERE usuario = '$usuario' AND senha = '$senha' ";
            $result = mysqli_query($conexao, $sql);
            if(mysqli_num_rows($result) > 0){
                while($res = mysqli_fetch_array($result)){
                    $ativo = $res['ativo'];
                    $nivel = $res['nivel'];
                    $usuario = $res['usuario'];
                    $senha = $res['senha'];
                    $email = $res['email'];
                    $nome = $res['nome'];
                    $cadastro = $res['cadastro'];
    header("Location: index2.php"); 
    exit;
            }
                }else{
                    echo "<center><h3>Usuário ou senha inválidos</h3></center>"; }
                     }
        }
        ?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiramente ofuscação não deve ser usado!!!. Pode aliviar dezenas de horas procurando corrigir aleatórios erros que poderiam ser evitados e sanados logo de início!

4 horas atrás, mm_edilson disse:

@session_start();

 

De fato se ele digitar no endereço da url sim ele irá carregar o arquivo e isso você não pode e nem tem como impedir.

Então o que você pode está fazendo é redirecionar o usuário para o devido local.

<?php
session_start(); // <<< isso vem antes de tudo a partir a primeira abertura de tag PHP 
// index2.php
if (!isset($_SESSION['usuario_logado'])) {
  header('LOCATION: index.php'); // redireciona
} else {
  echo 'existe a $_SESSION[\'usuario_logado\'] você não será redirecionado';
}

 

Você também pode está optando por modos de re-escrita do apache para omitir os nomes de arquivos na url como index.php ou index2.php etc...

Se essa arquitetura for bem elaborada e sólida uma pessoa nunca irá descobrir qual arquivo de fato está sendo processado no servidor.

Ou seja nunca saberá se está em index.php, index2.php ou seja lá qual for o arquivo.

A desvantagem disso é que pode ficar complexo demais manutenções e add-ons futuros por quem não desenvolveu o sistema.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A maneira mai simples é criar uma sessão caso o login estejaa correto.

Na página que você quer  proteger verifica se a sessão existe para poder exibir a pg

você não usa nem um md5 nisso aí e nenhum filtro para evitar injection?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.