Sistema de Login com PHP, AJAX, jQuery e MySQL

Olá a todos, pretendo aqui desenvolver um sistema de login simples com o uso de PHP, AJAX, jQuery e Banco de Dados MySQl.
Primeiro crie uma tabela no seu banco de dados chamada usuarios da seguinte maneira:

CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` text NOT NULL,
  `email` text NOT NULL,
  `senha` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

E faça a inserção de um registro na tabela, usando o método SHA1, função usada geralmente para criptografia, que de acordo com texto informado gera uma sequencia de números e letras equivalentes ao texto anterior, só que de forma disfarçada. A fução SHA1 tem suas vulnerabilidades, por isso a considerada mais segura é a SHA-256.

insert into usuarios (nome, email, senha ) values ('admin', 'admin@clubedosgeeks.com', sha1('123456'));

Depois disso crie um arquivo HTML, chamado index.html, importe a biblioteca jQuery nele:


Formulário de login

Crie um formulário simples para o login, é um H2 ou div com id=”errolog” para que possamos informar ao usuário que suas credenciais são inválidas.

Usuário ou senha errados!

Ainda no arquivo index.html abra uma tag script e coloque o seguinte código JavaScript:

$(document).ready(function(){
	$('#errolog').hide(); //Esconde o elemento com id errolog
	$('#formlogin').submit(function(){ 	//Ao submeter formulário
		var login=$('#email').val();	//Pega valor do campo email
		var senha=$('#senha').val();	//Pega valor do campo senha
		$.ajax({			//Função AJAX
			url:"login.php",			//Arquivo php
			type:"post",				//Método de envio
			data: "login="+login+"&senha="+senha,	//Dados
   			success: function (result){			//Sucesso no AJAX
                		if(result==1){						
                			location.href='restrito.php'	//Redireciona
                		}else{
                			$('#errolog').show();		//Informa o erro
                		}
            		}
		})
		return false;	//Evita que a página seja atualizada
	})
})

Arquivo login.php

Este arquivo é responsável pelo login propriamente dito, pois nele acontecem a conexão com o banco de dados, a validação dos dados e a abertura da seção no servidor, veja:


Arquivo restrito.php

O arquivo restrito.php, como o próprio nome diz será a nossa página restrita, que testa se há sessão criada, se não houver ele redireciona para a tela de login, coloque o seguinte no cabeçalho do arquivo e de todos os outros que você deseja proteger.


Logout

Para logout criaremos o arquivo logout.php com o seguinte código:


E no link do botão sair, ou como você preferir, aponte para o arquivo, da seguinte forma:

SAIR

Pronto, qualquer dúvida ou sugestão deixe um comentário. Até a próxima!
[ads1]

Jayr Alencar

Doutorando em Ciências da Computação no Centro de Informática da Universidade Federal do Pernambuco (CIn - UFPE); Mestre pela mesma instituição; Formado em Análise e Desenvolvimento de Sistemas; Católico; Fã de O Senhor do Anéis.

43 thoughts on “Sistema de Login com PHP, AJAX, jQuery e MySQL

      1. Acho que me expressei mal devido a minha falta de conhecimento. O correto seria: Essa forma de validação que você mostrou nesse post é segura visto que é possível desativar o JS?

          1. Obrigado por responder. Não tem muita haver com o seu post, mas estou com código aqui e não faço ideia de como fazê-lo funcionar:

            $.ajax({
            url: “login.php”,
            method: ‘POST’,
            dataType: ‘json’,
            data: {
            do_login: true,
            username: $(form).find(‘#username’).val(),
            password: $(form).find(‘#password’).val(),
            },
            success: function(resp)
            {}

            Nunca mexi com dataType “json”, somente “html”. O que + ou – eu teria que colocar no arquivo login.php para que funcionasse?

  1. aqui sempre da a mensagem de errolog, como se nao reconhecesse esse if result success: function (result){ //Sucesso no AJAX
    if(result==1){
    location.href=’restrito.php’ //Redireciona
    }else{
    $(‘#errolog’).show(); //Informa o erro
    }

  2. Olá, seu script apresentou erros, após testar verifiquei que o retorno de erros de código que podem se tornar obsoletos como o ‘mysql’ impediam a leitura, como muitos utilizam dos códigos de erros em capturas para prever necessidades de atualizar seus scripts oculta-los pode não ser a solução, então necessita-se atualizar para as tags ‘mysqli’. Grato.

  3. Amigão, eu devo estar sendo de uma ignorância enorme, mas não conheço esse “” que está na segunda linha do terceiro bloco de código. Meu servidor também não, ele fica dizendo
    Parse error: syntax error, unexpected ‘<' in (e o caminho do arquivo e linha do código onde está o pre)

  4. Pingback: Google
  5. Pingback: Google
  6. Muito bom o tutorial, agora digamos que eu pretenda usar esse sistema num app hibrido, nesse caso não poderia usar codigo php direto no script, teria que criar um metodo para restringir as paginas em javascript (ajax) e pegando o id do usuario, como eu faria isso?

  7. Olá, como eu faço em vez do success: function(result) retornar echo “1”, retornar $_SESSION[‘nome’]. Sei que da pra imprimir utilizando , porém no que eu to precisando agora é pra que retorne em json para o success do ajax. Se puder ajudar, vai ser de suma importancia.
    Obrigada

  8. Brows perfeito, só que está obsoleto, “mysql” meu servidor externo por exemplo não aceita, da erro de conexão e diz “deprecade bla!!bla!!”, atualiza que tem tudo a ver pra quem quer desenvolver no app no cordova.
    Dá uma atualizada aí!!

    Valew!!

  9. Opá beleza, professo… então fiz este comentário devido estar tentando desenvolver um app pelo cordova utilizando a sessionStorage só que o problema é que a maioria dos tutos em AJAX o start(), são em pag.php, que não é o caso em html lado cliente, o seu exemplo chega bem próximo ao que eu quero, atualizei por aqui pra misqli, então relacionei uma tabela_fk, o problema parou por aí não consigo realizar a inserção, explicando “Quero mostrar os pedidos só de um cliente na sessão dele ao logar-se” acho que o é o problema de todo principiante, mas, deixando claro que em php a session funciona perfeitamente pois é só lado servidor. A pergunta que faço é como as sessions se conversam lado cliente e servido para otimizar a funcionalidade do app.
    Mas meu caro, caso tenha uma dica que facilite minha vida agradeço bastante.
    Valeu e até +.

    1. Oi Peter. Você vai precisar usar outra estratégia para autenticação, pois não dá pra trabalhar com sessões quando o cliente é ionic (ou mobile). Recomendo o JWT e o Laravel Passport para isso. Seu servidor vai dar um token ao usuário, que ele vai usar para todas as requisições de áreas protegidas.

  10. Opa meu caro tudo bem, dei uma atualizada no codigo convertendo para mysqli então tentei relacionar uma tabela pedidos para o usuarios e não deu certo a inserção, porem quando segrego as tabelas ai consigo cadastrar os pedidos, consigo logar tranquilamente estando ou não relacionadas tem alguma dica?

    Abaixo as tables;

    CREATE TABLE `usuarios ` (
    `id` int(9) NOT NULL,
    `name` varchar(100) NOT NULL,
    `email` varchar(100) NOT NULL,
    `username` varchar(100) NOT NULL,
    `password` varchar(100) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    ALTER TABLE `usuarios `
    ADD PRIMARY KEY (`id`);
    ALTER TABLE `usuarios `
    MODIFY `id` int(9) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

    CREATE TABLE `pedidos` (
    `id` int(11) NOT NULL auto_increment,
    `title` varchar(100) NOT NULL,
    `name` int(5) NOT NULL,
    `price` decimal(10,2) NOT NULL,
    `login_id` int(11) NOT NULL,
    PRIMARY KEY (`id`),
    CONSTRAINT FK_pedidos_1
    FOREIGN KEY (login_id) REFERENCES usuarios (id)
    ON UPDATE CASCADE ON DELETE CASCADE
    ) ENGINE=InnoDB;

    Abraços

  11. Oiii, estou tentando seguir o tutorial, ams ta dando o seguinte erro: extension, edge, https, chrome-untrusted.
    jquery.min.js:4 POST file:///C:/xampp/htdocs/projeticolos/login.php net::ERR_FAILED
    index.html:1 Access to XMLHttpRequest at ‘file:///C:/xampp/htdocs/projeticolos/login.php’ from origin ‘null’ has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome-extension, edge, https, chrome-untrusted.
    jquery.min.js:4 POST file:///C:/xampp/htdocs/projeticolos/login.php net::ERR_FAILED

Deixe um comentário para anderson Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


Deprecated: Creation of dynamic property Daisy_Blog_Google_Local::$files is deprecated in /home2/clube692/public_html/wp-content/themes/daisy-blog/inc/blocks/font-family/inc/class-fonts-google-local.php on line 77

Deprecated: Creation of dynamic property Daisy_Blog_Google_Local::$files is deprecated in /home2/clube692/public_html/wp-content/themes/daisy-blog/inc/blocks/font-family/inc/class-fonts-google-local.php on line 77