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)










