Ir para conteúdo
Fórum Script Brasil
  • 0

Opinião Login


ThinkBrunus

Pergunta

Olá!

Mais uma vez venho em busca de uma opinião sobre como fazer um sistema de login.

O que pretendo é que o user faça o login no form normal e os dados sejam validados na mesma página, e se a autenticação for validada, queria que desaparecesse o tal formulário e aparecesse os dados do user, por exemplo.

Entretanto já fiz umas pesquisas e algum estudo para desenvolver algo em AJAX e PHP, ou só em PHP. De momento estou a tentar implementar AJAX com PHP mas já tenho a cabeça quase em àgua....

Gostava de saber opiniões.

Obrigado!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Resolvi seguir o teu conselho, optando por fazer o sistema de login utilizando AJAX e PHP, só não estou a conseguir fazer uma coisa, ou seja, ao inserir os dados para autenticar escrevo em php o form com uma cláusula if

<div id="iBlockUser">
    <?php
        if (!isset($_SESSION['nome'])) {
            unset($_SESSION['nome']);
            echo"<script language='javascript' src='scripts/ajax.js'></script>
            <table><form id='frmLogin' name='frmLogin' method='post' >
            <tr>
                <td>Username:</td>
                <td><input type='text' name='txtUserName' id='txtUserName' size='14' maxlength='14' /></td>                
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type='text' name='txtPassword' id='txtPassword' size='14' maxlength='14' /></td>                
            </tr>
            <tr>
                <td colspan='2' align='right'><input name='btnLogin' value='Login' id='btnLogin' type='submit' onclick='java script:login();' /></td>
            </tr>                    
            </form>
        </table>";                    
        }else{
            include('seguranca.php');         
        }    
           </div>
    ?>
aqui é chamado o ficheiro AJAX, busca os dados e envia-os para a página onde faz a validação dos dados
function login(){
xmlHttp = getXmlHttpObject(); //inicializa variável com identificação do browser
var username = encodeURI(document.getElementById('txtUserName').value);
var password = encodeURI(document.getElementById('txtPassword').value);
nocache = Math.random();
xmlHttp.open("GET", "login.php?username="+username+"&password="+password+"&nocache="+nocache);
    xmlHttp.onreadystatechange = function(){
        if (xmlHttp.readyState == 4) {
            alert(xmlHttp.responseText);
            //document.getElementById("iMenuV").innerHTML = xmlHttp.responseText;
        }
    }
xmlHttp.send(null);
}
Agora valida dados enviados e retorna valor para AJAX, e se validar correctamente cria a session com o username...
<?php
include('includes/config.php');

//CÓDIGO LOGIN AJAX&PHP
$username = $_GET['username'];
$password = $_GET['password'];
$sql = "SELECT * FROM ndetalhe WHERE nome='" . $username . "' AND password='" . $password . "'";
$query = mysql_query($sql) or die('Query failed: ' . mysql_error());
$result = mysql_num_rows($query);
    if ($result > 0){
        echo "Confere!";
        session_start();
        $_SESSION['nome'] = $username;
    }else{
        echo "Dados incorrectos!";
    }
?>
Por fim, e aqui o meu problema:
......
        }else{
            include('seguranca.php');         
        }    
    ?>
O que pretendo é que quando o user for validado, desapareça o formulário e seja apresentado o nome do user, por exemplo. Este include refere-se a essa mensagem
<?php
    echo "Olá, " . $_SESSION['nome'];
?>

Que não está a funcionar....o formulário mantem-se e a mensagem não aparece....

coloquei on-line em : http://teste.vibeltaxis.com/index.php

Link para o comentário
Compartilhar em outros sites

  • 0

Olá a todos!

Já consegui novas evoluções na minha "guerra" para implementar este sistema de login. Agora venho aqui partilhar o código, caso haja alguém com as mesmas dúvidas.

index.php

<?php
session_start();
?>
...
&lt;script src="scripts/ajax.js"></script>
...
    <div id="iBlockUser">
        <?php
            if (empty($_SESSION['username'])){
                include('login.php');
            } else {
                echo "<div id='iBlockUserLogout'>" . $_SESSION['username'] . "</div>";
            }
        ?>
        </div>
Pretende-se que no index seja apresentado o form para o utilizador se logar, apenas se este ainda não estiver logado, se estiver logado será apresentado uma mensagem com o nome do utilizador. ajax.js
var xmlHttp;
var nocache = 0;

function login(){
xmlHttp = getXmlHttpObject(); //inicializa variável com identificação do browser
var username = encodeURI(document.getElementById('txtUserName').value);
var password = encodeURI(document.getElementById('txtPassword').value);
nocache = Math.random();
xmlHttp.open("GET", "loginResponse.php?username="+username+"&password="+password+"&nocache="+nocache);
    xmlHttp.onreadystatechange = function(){
        if (xmlHttp.readyState == 4) {
            if (xmlHttp.responseText == 0){
                alert('Dados incorrectos!');
            } else{
                document.getElementById("iBlockUser").innerHTML = xmlHttp.responseText;
            }
        }
    }
xmlHttp.send(null);
}


//verifica qual o browser utilizado
function getXmlHttpObject(){
var xmlHttp = null;
    try {  // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch (e) {  // Internet Explorer
          try {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
          catch (e) {
            try {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
              }
            catch (e) {
                   alert("O browser não suporta AJAX!");
                  return false;
              }
        }
      }
    return xmlHttp;
}
Verifica o browser e faz um request com os dados inseridos para os validar. responseLogin.php
<?php
session_start();
include('includes/settings.php');

//CÓDIGO LOGIN AJAX&PHP
$username = $_GET['username'];
$password = $_GET['password'];
$sql = "SELECT * FROM ndetalhe WHERE nome='" . $username . "' AND password='" . $password . "'";
$query = mysql_query($sql) or die('Query failed: ' . mysql_error());
$result = mysql_num_rows($query);
    if ($result > 0){
        $_SESSION['username'] = $result -> nome;
    }else{
        echo "0";
    }

Aqui conectamos à base dados e fazemos a query para validar os mesmos dados e retornar se são válidos ou não...

O código está parcialmente a funcionar, ainda aparece um warning quando é feito o login, e se tivermos o nosso site a navegar dentro de outras pastas ele não vai encontar o ficheiro responseLogin.php.....estou actualmente a melhorar isso, se alguém tiver alguma dica será bem vinda.

Abraços

Editado por ThinkBrunus
Link para o comentário
Compartilhar em outros sites

  • 0

Problema resolvido, basta alterar a seguinte linha

xmlHttp.open("GET", "loginResponse.php?username="+username+"&password="+password+"&nocache="+nocache);

Já agora, quando faço o login, ele dá-me o seguinte warning:

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3.

Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled.

You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively.

in Unknown on line 0

Isto será porquê?

Editado por ThinkBrunus
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...