Problems with login cookies

Asked

Viewed 120 times

0

In the login page send the form with your login data, record the data in cookies and redirect to another page. But I am suffering problem if the user logout, I wanted to delete the cookies, on the login page I have a check if the cookies exist it redericiona automatically to a page where it checks the data(same page where I log cookies). However for this to work would have to delete this cookie so that if it did not exist it would have to write the data again in the form. Follows Code:

<!DOCTYPE html>
<?php

#PAGINA DO FORMULARIO DE LOGIN


    include "seguranca/banco/ff_conexao_banco.php";
    include "componentes/php/ff_operacaobd_php.php"; #inclui a pagina operation nas paginas administrativas!
    include "componentes/php/ff_expressoes_php.php"; #inclui a pagina das validações de expressao nas paginas do front-end!
    include "componentes/php/ff_mensagens_php.php"; #inclui a pagina safedelete nas paginas administrativas!
  #verifica os dados!
    if(isset($_COOKIE['lembrarUsuario'])){
        $usuarioCookie = base64_encode($_COOKIE['lembrarUsuario']);

    }else{
        $usuarioCookie==NULL;
    }

    if(isset($_COOKIE['lembrarSenha'])){
        $senhaCookie = base64_encode($_COOKIE['lembrarSenha']);
    }else{
        $senhaCookie==NULL;
    }
  # se os dados existem ele manda pra pagina de verificação
    if($usuarioCookie AND $senhaCookie){
        header("location: seguranca/autenticacao/ff_login_autenticacao.php?usuarioCookie=$usuarioCookie&senhaCookie=$senhaCookie");




?>


    <?php
    }else{
    ?>
    <html lang="pt-br">
        <head>
            <title>Floricultura Filippi - Pedidos</title>
            <meta name="author" content="Gabriel Filippi, Rhuan Carvalho, Bruna Campioli, Melissa Possamai" />
            <meta name="description" content="Gerenciamento de Pedidos da Floricultura Filippi" />
            <meta name="keywords" content="Pedidos, entrega, floricultura filippi" />
            <meta charset="utf-8" />
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width,minimum-scale=1,maximum-scale=1">
            <link rel="icon" href="layout/imagens/favicon.ico" type="image/x-icon">

            <!-- Bootstrap Core CSS -->
            <link href="componentes/plugins/bootstrap/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">

            <!-- CSS PADRÃO DO TEMPLATE -->
            <link href="layout/css/template_default.css" rel="stylesheet">

            <!-- Custom Fonts -->
            <link href="componentes/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">

            <!--  CSS Gabriel, Rhuan, Bruna, Melissa-->
            <link href="layout/css/ff_style_frontend.css" rel="stylesheet" type="text/css">

            <!-- jQuery -->
            <script type="text/javascript" src="componentes/plugins/jquery/dist/jquery.min.js"></script>


            <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
            <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
            <!--[if lt IE 9]>
            <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
            <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
            <![endif]-->
        </head>
        <body>
          <div class="container">
            <div class="row">
              <div class="col-sm-8 col-sm-offset-2 text " style="text-align: center;">
                <img src="layout/imagens/logo.png" class="logo">
              </div>
              <div class="col-md-4 col-md-offset-4">
                <div class="login-panel panel panel-default">
                  <div class="panel-heading painel_login">
                      <h2>Login!</h2>
                      <h5>Entre com seu nome de Usuário ou E-mail e Senha:</h5>
                  </div>
                  <div class="panel-body painel_login">
                    <form name="frmlogin" method="POST" action="index.php?folder=seguranca/autenticacao/&file=ff_login_autenticacao&ext=php">
                      <fieldset class="fieldset_login">

                          <?php

                            if(isset($_GET['folder'])&&isset($_GET['file'])&&isset($_GET['ext'])){
                              if(!include $_GET['folder'].$_GET['file'].".".$_GET['ext']){
                                echo "<h1>Página não encontrada</h1>";
                              }else{
                              ?>
                                <script>
                                    $(document).ready(function() {
                                        $('.footerfront').css('bottom',"-95px");
                                    });
                                </script>
                              <?php
                              }
                            }
                          ?>
                        <div class="form-group">

                          <input class="form-control" type="text" name="txtusuario" maxlength="70" placeholder="E-mail ou Usuario"  autofocus>
                        </div>
                        <div class="form-group">
                          <input class="form-control" type="password" name="pwdsenha" maxlength="32" placeholder="●●●●●●●●●●●●"  >
                        </div>
                        <div class="checkbox">
                          <label>
                              <input type="checkbox" name="chkusuario" value="lembreme">Lembre-me
                          </label>
                        </div>
                        <!-- Change this to a button or input when using this as a form -->
                        <button type="submit" class="btn btn-lg btn-success btn-block" name="button">Login!</button>
                      </fieldset>
                    </form>
                  </div>
                </div>
              </div>
            </div>
          </div>
          <footer style="background-color: #e4e1e1 !important;" class="footerfront">
            <?php
              $datacopy = date('Y');
            ?>
            <div class="row" style="margin-right: 0px;   margin-left: 0px;">
              <div class="col-lg-6">
                <p class="direitos_autorais">© Copyright <?php echo $datacopy; ?> - <a href="http://www.floriculturafilippi.com.br/" target="_blank" >Floricultura Filippi</a>. Todos os direitos reservados. - <a href="_licencas/loader.php">Licenciamento</a></p>
              </div>
              <div class="col-lg-3">
                <span class="fa fa-whatsapp"></span>
                <b style="text-align: right;"> (47) 99218-3829</b>
              </div>
              <div class="col-lg-3">
                <span class="fa fa-phone"></span>
                <b> (47) 3439-1090</b>
              </div>
            </div>
            <!-- /.row -->
          </footer>
      </body>
    </html>
    <?php       
    }
    ?>



+++++++++++++++++++++++++++++++++++++++++++++++++++++++
PAGINA ONDE VERIFICA OS DADOS E TBM REGISTRA OS COOKIES
+++++++++++++++++++++++++++++++++++++++++++++++++++++++

<?php
# se dados da cookie existir armazena na variavel
if(isset($_GET["usuarioCookie"])){
    include "../banco/ff_conexao_banco.php";
    $p_usuario = base64_decode($_COOKIE['lembrarUsuario']);
    $p_senha = base64_decode($_COOKIE['lembrarSenha']);
    $hash_senha = MD5($salt.$p_senha); // criptografar a senha
}else{
  # se nao armazena na variavel os dados do formulario
    $p_usuario = $_POST['txtusuario']; 
    $p_senha = $_POST['pwdsenha'];
    $hash_senha = MD5($salt.$p_senha); 
}
$aviso = "Erro ao se autenticar"; /* TITULO do painel */
$cor = "panel-red"; /* cor do painel */

if($p_usuario==""){
    $msg = buildMessage('senha', 'Usuário');
}else if($p_senha==""){
    $msg = buildMessage('senha', 'Senha');
    }else{
        $sql_sel_usuario = "SELECT usuarios.id, usuarios.usuario, usuarios.senha, administradores.email, administradores.status, administradores_terceirizados.status, entregadores.status, funcionarios.status, administradores_terceirizados.email, entregadores.email, funcionarios.email, usuarios.permissao FROM usuarios LEFT JOIN administradores ON usuarios.id = administradores.usuarios_id LEFT JOIN funcionarios ON usuarios.id = funcionarios.usuarios_id LEFT JOIN entregadores ON usuarios.id = entregadores.usuarios_id LEFT JOIN administradores_terceirizados ON usuarios.id = administradores_terceirizados.usuarios_id WHERE (administradores.status=0 OR funcionarios.status=0 OR entregadores.status=0 OR administradores_terceirizados.status=0) AND (BINARY usuarios.usuario='".$p_usuario."' OR BINARY administradores.email='".$p_usuario."' OR BINARY administradores_terceirizados.email='".$p_usuario."' OR BINARY funcionarios.email='".$p_usuario."' OR BINARY entregadores.email='".$p_usuario."') AND BINARY usuarios.senha='".$hash_senha."'";
        $sql_sel_usuario_preparado = $conexaobd->prepare($sql_sel_usuario);
        $sql_sel_usuario_preparado->execute();
        $sql_sel_usuario_dados = $sql_sel_usuario_preparado->fetch();
        if($sql_sel_usuario_preparado->rowCount()>0){
            if(isset($_POST["chkusuario"])){
                $p_senha = $_POST['pwdsenha'];
                setcookie("lembrarUsuario",  base64_encode($p_usuario), (time() + (3 * 24 * 3600))); /* duração de 3 dias*/
                setcookie("lembrarSenha",  base64_encode($p_senha), (time() + (3 * 24 * 3600))); /* duração de 3 dias*/
            }
            //guardando as informações dentro de array
            //iniciando sessão
            session_start();
            //armazenamento do id do usuario para sabermos quem está autenticando
            $_SESSION['idUsuario'] = $sql_sel_usuario_dados['id'];
            //armazenamento do usuario para mostrarmos nas telas do back-end
            $_SESSION['usuario'] = $sql_sel_usuario_dados['usuario'];
            //armazenamento da permissão para sabermos o que ele pode acessar
            $_SESSION['permissao'] = $sql_sel_usuario_dados['permissao'];
            //armazenamento do id da SESSÃO para futura implementação de segurança
            $_SESSION['idSessao'] = session_id();
            if(isset($_GET["usuarioCookie"])){
                if($sql_sel_usuario_dados['permissao']==0 AND $sql_sel_usuario_dados['status']==0){
                header('location: ../../sistema/admin/ff_admin.php');
                }else if($sql_sel_usuario_dados['permissao']==1 AND $sql_sel_usuario_dados['status']==0){
                  header('location: ../../sistema/funcionario/ff_funcionario.php');
                    }else if($sql_sel_usuario_dados['permissao']==2 AND $sql_sel_usuario_dados['status']==0){
                      header('location: ../../sistema/admin_terceirizada/ff_admin_terceirizada.php');
                        }else if($sql_sel_usuario_dados['permissao']==3 AND $sql_sel_usuario_dados['status']==0){
                          header('location: ../../sistema/entregador/ff_entregador.php');
                            }else{
                                $msg = buildMessage('usuario_permissao', 'Permissão');
                            }   
            }else{
                if($sql_sel_usuario_dados['permissao']==0 AND $sql_sel_usuario_dados['status']==0){
                header('location: sistema/admin/ff_admin.php');
                }else if($sql_sel_usuario_dados['permissao']==1 AND $sql_sel_usuario_dados['status']==0){
                  header('location: sistema/funcionario/ff_funcionario.php');
                    }else if($sql_sel_usuario_dados['permissao']==2 AND $sql_sel_usuario_dados['status']==0){
                      header('location: sistema/admin_terceirizada/ff_admin_terceirizada.php');
                        }else if($sql_sel_usuario_dados['permissao']==3 AND $sql_sel_usuario_dados['status']==0){
                          header('location: sistema/entregador/ff_entregador.php');
                            }else{
                                $msg = buildMessage('usuario_permissao', 'Permissão');
                            }   
            }

            }else{
                $msg = buildMessage('login', 'Usuário', 'Senha');
            }
    }
?>
<div class="mensagem col-md-12 col-lg-12">
    <div class="panel  <?php echo $cor ?>">
        <div class="panel-heading">
                <?php echo $aviso ?>
        </div>
        <div class="panel-body">
            <p><?php echo $msg;?></p>
        </div>
    </div>
</div>


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PARA EXCLUIR OS COOKIES ESTOU USANDO O SEGUINTE CÓDIGO ABAIXO
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



<?php
    session_start();
    session_unset();
    session_destroy();
    setcookie("lembrarUsuario",  base64_encode($_COOKIE['lembrarUsuario']), (time() - (3 * 24 * 3600)));
    setcookie("lembrarSenha",  base64_encode($_COOKIE['lembrarSenha']), (time() - (3 * 24 * 3600)));
    header ('location: ../../index.php?deslogado=true')
?>
  • When you "call" the page for a logout and delete the cookies put a "? logout=1" eg and put an if before the redirect...

  • see my edited reply

  • Your code is full of errors, and a lot of unnecessary stuff, so I’d start all over again with 0, And it would separate into smaller parts, because trying to fix it gets a little bit more laborious. Unless you badly formatted the code when you created the question, it’s really chaotic.

  • @Edilson only this badly formatted here, on the site is separated in several parts(pages).

1 answer

1


What is causing problems is the base64_encode function return prohibited characters in cookie names.

ON THE PAGE WHERE IT CHECKS DATA AND TBM REGISTERS COOKIES

do so:

$base64usuario= base64_encode($p_usuario);
$base64senha= base64_encode($p_senha);
$base64usuario = str_replace(array('=','+','/'),'',$base64usuario);
$base64senha = str_replace(array('=','+','/'),'',$base64senha);

setcookie("lembrarUsuario",  $base64usuario, (time() + (3 * 24 * 3600)), "/");
setcookie("lembrarSenha",  $base64senha, (time() + (3 * 24 * 3600)), "/");

The cookie names shall consist of ASCII characters.

They cannot contain

aspas duplas

espaço em branco

\ @ Ou # \?

Parênteses, colchetes ou chaves

Vírgulas, dois pontos ou ponto e vírgula

sinal de igual (=), sinais maior ou menor que (> <)

Barras ou barras invertidas

The cookie values shall consist of ASCII characters.

May not contain:

Caracteres de controle

Caracteres de espaço em branco

Aspas duplas, exceto no início e no final se o valor inteiro for duplamente cotado

Vírgulas

Ponto-e-vírgula

Barras invertidas

Sources

Mozilla Developer Network

Cookies: HTTP State Management - by Jordan Johnson

  • I already have this page: <?php session_start(); session_unset(); session_destroy(); setcookie("rememberUsuario", base64_encode($_COOKIE['rememberUsuario']), (time() - (3 * 24 * 3600)); setcookie("remember", base64_encode($_COOKIE['remember']), (time() - (3 * 24 * 3600))); header ('Location: .. /.. /index.php? stripped=true') ?>

  • So your question is unclear.

  • It’s just that it’s not working, on the login page it’s already redirecting automatically as if it still has cookies saved

  • when creating cookies you used $cookiePath = "/";

  • Isn’t that right? I don’t know about cookies?

  • Sorry for the delay, solved my problem thank you very much

Show 1 more comment

Browser other questions tagged

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