Opinião Login
#1
Posted 14/03/2009, 15:31
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!
#2
Posted 14/03/2009, 21:49
Por exemplo:
if ($logado == "0") {
if ($_GET["erro"] == "1") {
código dizendo que ele errou os dados
}else{
if ($_GET["login"] == "1") {
código do formulário
}else{
código do formulário
}
}
}else{
script que mostrar os dados
}
velho, isso é o grosso da coisa.
não tente executar este codigo, apenas tome como base a logica dele.
e outra, desconsidere qualquer erro de sintaxe, fiz a mão correndo aqui rs.
#3
Posted 16/03/2009, 18:29
Estou a fazer da seguinte forma:
<?php if (!isset($_SESSION['nome'])) { unset($_SESSION['nome']); echo"<script language='javascript' src='scripts/ajax.js'></script> <div id='iBlockUser'> <table><form id='frmLogin' name='frmLogin' method='post' action='java script:login()' > <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' /></td> </tr> </form> </table></div>"; }else{ echo "<div id='iBlockUser'>" . include('seguranca.php') . "</div>"; } ?>
Nota que quando faço o submit do forma, chamo o ajax.js que por sua ver chama a página login.php, este que retorna a autenticação dos dados, e nesta caso os dados sejam válidos inicio a sessão
if ($result > 0){ echo "Confere!"; session_start(); $_SESSION['nome'] = $username; }else{ echo "Dados incorrectos!"; }
Mas é como digo, acho que falta aqui alguma coisa e ainda não cheguei lá...se alguém tiver alguma sugestão agradeço!
#4
Posted 16/03/2009, 23:14
echo "Confere!"; session_start();Você não pode fazer isso, session_start() tem que vir no topo do arquivo.
Tente logar sem esse javascript aí, se não funcionar poste o código completo da página login.php.
Muller Dias
ex-administrador Fórum WMO
#5
Posted 19/03/2009, 13:19
Já tentei escrever a sessão no responseText mas não funciona, e agora estou a começar a perceber o pq.....
Fiz umas alterações, a página login.php está assim:
include('includes/settings.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 "1"; }else{ echo "0"; }
E no AJAX estou a fazer assim
xmlHttp.onreadystatechange = function(){ if (xmlHttp.readyState == 4) { if (xmlHttp.responseText == 1){ document.getElementById("iBlockUserLogin").style.display="none"; document.getElementById("iBlockUserLogout").innerHTML = "session_start(); $_SESSION['test'] = $username;"; // alert("Confere!"); }else{ alert("Dados incorrectos!"); } }
Isto de forma a inicializar a dita sessão e apresentar após a validação uma div com o nome do user guardado na $_SESSION['test'] (que será o nome do user).
Achas que tem forma de inicializar a sessão tendo como base este sistema?
Edição feita por: ThinkBrunus, 19/03/2009, 13:22.
#6
Posted 21/03/2009, 14:12
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(); ?> ... <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
#7
Posted 21/03/2009, 14:52
Muller Dias
ex-administrador Fórum WMO
#8
Posted 24/03/2009, 09:38
xmlHttp.open("GET", "loginResponse.php?username="+username+"&password="+password+"&nocache="+nocache);
Já está resolvido, coloquei assim:
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ê?
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)