publicidade

Criando um sistema de Login Básico com PHP e MYSQL

Nesta postagem vamos abordar a autenticação de usuários em um sistema PHP. Muitas vezes criamos sistemas que são responsáveis por rotinas privadas do cliente e por isso é necessário criar um controle no acesso ao sistema, para que só pessoas autorizadas possam se conectar a ele. Nesta postagem criaremos uma rotina de autenticação básica ao nosso sistema usando login e senha do usuário. Hoje existem muitas técnicas de conexão segura, mas para efeito de estudos usaremos uma conexão básica e em outras postagens vamos implementando novos recursos e tornando a autenticação mais segura.

Em resumo, o que faremos é uma página de autenticação onde o usuário vai informar seu login e senha e usaremos esses dados para fazer a validação no banco de dados. Se os dados forem autenticados passaremos uma mensagem de boas-vindas e um botão para se desconectar, senão direcionaremos ele de volta para a página de login informando o motivo do erro.

Vamos ao código, lembrando que estamos trabalhando em uma única página para efeitos de estudo e facilidade de teste quando você executar no seu servidor. A rotina de conexão é a mesma de outras postagens:

# primeiro vamos definir algumas constantes
# com as informações do Banco de Dados que
# usaremos para a conexão.

# Servidos do nosso banco de dados.
define( 'DB_HOST', 'localhost'); 
# Nome do banco de dados.
define( 'DB_NAME', 'teste');
# Usuário de acesso.
define( 'DB_USER', 'root');
# Senha de acesso.
define( 'DB_PASS', 'As190806##');

# Aqui montamos a string de conexão que será usada
# como parâmetro na chamada da classe PDO.
$srv = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;

# Aqui vamos criar a conexão que permitirá o acesso
# ao BD e armazená-la na variável $instance que agora
# é um objeto PDO.
$instance = new PDO( $srv, DB_USER, DB_PASS );

Com essa rotina, já temos a conexão com o banco de dados disponível. Agora vamos ao código para a autenticação. A primeira coisa a fazer é iniciar a sessão com ‘session_start()’.

session_start();

Depois verificamos se o parâmetro ‘logout’ foi enviado, o que significaria que o usuário clicou no botão de desconectar. Se for esse o caso, apagamos a sessão atribuindo a ela um ‘array’ vazio como valor.

if( isset( $_POST['logout'] ) ) $_SESSION = array();

Recuperamos os dados do usuário para validação.

$user = filter_input( INPUT_POST, 'user' );
$pass = filter_input( INPUT_POST, 'pass' );

Agora o código de validação onde recuperamos os dados no Banco de Dados, caso o login seja válido, e comparamos a senha para ver se está correta. Nesta verificação informaremos ao usuário problemas com email e senha, ou se tudo estiver correto liberamos o acesso.

if( !isset( $_SESSION['user_login'] ) ) {

	if( isset( $user ) AND !empty( $user ) )  {

		$query = "SELECT * FROM users WHERE user_login = '" . trim($user) . "'";

		$stm =  $instance->query( $query );

		$data = $stm->fetch(PDO::FETCH_OBJ);

		if( $data ) { 

		# Existe o email informado

			if( !strcmp( md5( $pass ) , $data->user_pass ) ) { 

				# a senha está correta então adicionamos os dados
				# do usuário na sessãoe retornamos esses dados.				

		        $_SESSION['user_login'] = $data->user_login;
		        $_SESSION['user_name'] = $data->user_name;
		        $_SESSION['time'] = time();

		        echo "Seja Bem vindo " . $_SESSION['user_name']  . "\n"

	    	} else {

	    		echo "Senha incorreta\n"
	    	}

		} else {
			echo "Email não cadastrado\n"
		}

	} else {

		# Não existe a sessão de usuário criada nem
		# dados do usuário para tentar realizar o login.

		echo "informe o login\n"
	}

} else {

	# Já existe a sessão de usuário criada então
	# retornamos os dados da sessão liberando o acesso ao sistema.
	$limit = 60;
	$start = $_SESSION['time'];
	$current =  time();
	$elapsed_time = $current - $start;

	if( $elapsed_time < $limit ) {

		$_SESSION['time'] = time();
		echo "Seja Bem vindo " . $_SESSION['user_name']  . "\n"
	} else {

		$_SESSION = array();
		echo "Tempo de acesso expirado"  . "\n"
	}

}

Quando um usuário for autenticado, armazenaremos alguns dados da conexão na sessão ($_SESSION) e usaremos esses dados para validar o ‘status’ da conexão. Por exemplo, armazenaremos o momento em que ele se conectou, em $_SESSION['time'], assim podemos controlar o tempo que a conexão ficou inativa e se tivermos um tempo máximo permitido para a inatividade, podemos realizar a desconexão. No nosso script usaremos valor de $_SESSION[user], para validar se o usuário já está conectado. Caso o valor esteja definido, é sinal de que tem uma conexão ativa e devemos dar acesso ao sistema. Com todas as verificações feitas, podemos executar o código responsável pela exibição das informações na tela.

if( !isset( $_SESSION['user_login'] ) ) {

	echo "<form method='POST'>";
	echo "<input name='user' type='text' placeholder='Informe o Login'>";
	echo "<input name='pass' type='password' placeholder='Informe a Senha'>";
	echo "<button type='submit'>Entrar</button>";
	echo "</form>";

} else {

	echo "<form method='POST'>";
	echo "<input name='logout' type='hidden' value='0'>";
	echo "<button type='submit'>Sair</button>";
	echo "</form>";
} 

Prontinho se tudo faça o teste! Se tudo deu certo você verá uma tela como essa...

Mas se alguma informação estiver incorreta, você será informado com outra mensagem na tela.

Vou deixar aqui a estrutura da tabela users que usamos para fazer a autnticação de usuários:

Criando um sistema de Login Básico com PHP e MYSQL

Nesta postagem vamos abordar a autenticação de usuários em um sistema PHP. Muitas vezes criamos sistemas que são responsáveis...

publicidade

Deixe um comentário:


Deixe seu comentário. Só serão exibidos comentários ligados ao texto do post. Links serão removidos.

Comentários: