Jump to content


Photo

Opinião Login


  • Faça o login para participar
7 replies to this topic

#1 ThinkBrunus

ThinkBrunus

    Normal

  • Usuários
  • 89 posts
  • Sexo:Masculino

Posted 14/03/2009, 15:31

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!

#2 ODalZin.org

ODalZin.org

    Novato no fórum

  • Usuários
  • 12 posts
  • Sexo:Não informado
  • Localidade:Goiânia - GO

Posted 14/03/2009, 21:49

Use IF's.
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 ThinkBrunus

ThinkBrunus

    Normal

  • Usuários
  • 89 posts
  • Sexo:Masculino

Posted 16/03/2009, 18:29

Estou a tentar seguir a tua ordem de ideias...mas há alguma coisa (que ainda não descobri) que me está a falhar!
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! (y)

#4 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

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.
att,
Muller Dias
ex-administrador Fórum WMO

#5 ThinkBrunus

ThinkBrunus

    Normal

  • Usuários
  • 89 posts
  • Sexo:Masculino

Posted 19/03/2009, 13:19

Pois...acho que essa é a razão de não estar a conseguir inicializar a sessão!
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 ThinkBrunus

ThinkBrunus

    Normal

  • Usuários
  • 89 posts
  • Sexo:Masculino

Posted 21/03/2009, 14:12

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();
?>
...
<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 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 21/03/2009, 14:52

Mas qual é o erro que aparece?
att,
Muller Dias
ex-administrador Fórum WMO

#8 ThinkBrunus

ThinkBrunus

    Normal

  • Usuários
  • 89 posts
  • Sexo:Masculino

Posted 24/03/2009, 09:38

Dizia-me que não encontrava o objecto, referia-se a
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)

IPB Skin By Virteq