Ir para conteúdo

Sistema De Login Php/sql Por Sessions


Arkilus

Posts Recomendados

Sistema Básico de Login PHP/SQL por Sessions

 

Introdução

Na web, sempre que se deseja trabalhar com sistemas mais dinâmicos, que filtrem o usuário e a partir daí libere novas funções ou aja diferente é necessário o uso do famoso ‘Sistema de Login’. Este consiste num sistema que grava no servidor e/ou browser informações do usuário de diversas formas, a mais comum é através de uma interface de registro, onde o usuário insere algumas informações e também uma senha, com a qual ele poderá ser reconhecido pelo servidor. Estas informações são comumente gravadas em um banco de dados ou (raramente, por falta de praticidade) em arquivos de texto, a partir de onde elas serão recuperadas e checadas quando um usuário tentar logar (entrar) no sistema.

Convém que enquanto o usuário estiver visitando diversas páginas do site ele permaneça logado no sistema, e para que as informações não se percam são usados alguns métodos de gravação. O mais comum deles é chamado Session. Nesse tipo o servidor cria variaveis internas para aquele usuario, e ele permanecerá logado no sistema enquanto mantiver o browser aberto (mas o usuário pode ser deslogado caso fique muito tempo sem atividade no site, por mais que o mesmo esteja aberto).

Propósito desse tutorial

Expôr o esqueleto de um sistema de login PHP/SQL por Sessions, com devidas explicações sobre o mesmo.

Conhecimentos Necessários

Básicos de HTML, PHP e SQL

Tabela MySql usada

 

CREATE DATABASE testes;CREATE TABLE `users` (     `id` int(3) unsigned NOT NULL auto_increment,      `nick` varchar(50) collate latin1_general_ci NOT NULL,     `password` varchar(50) collate latin1_general_ci NOT NULL,  PRIMARY KEY  (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2;INSERT INTO `users` VALUES (1, 'admin', 'admin');

 

Iniciando uma Sessão

Sempre que formos usar sessions devemos fazer chamada à função session_start() na primeira linha do documento (antes de qualquer saída para o browser) pois ela interfere nos headers.

Sempre que uma sessão é iniciada um cookie chamado PHPSESSID é instanciado com um valor string de 32bits, correspondente ao ID da sessão (por exemplo: d43da207c766778f46ffd087e7e319b1).

Notem que essa função não quer dizer que estamos iniciando uma sessão do 0, e sim que podemos tanto estar iniciando ou dizendo ao servidor que iremos usar as variáveis de sessão naquele script. Se quisermos usar as variáveis de sessão mas não chamarmamos session_start() no início do script elas não estarão disponiveis.

Instanciando Variáveis

Todas as veriáveis de sessão são armazenadas na array global $_SESSION – global porque ela pode ser vista em todos os níveis, tanto no script geral como dentro de qualquer função ou classe.

Instanciamos variáveis de sessão da mesma forma que instaciamos elementos de uma array:

  • $_SESSION[‘nome_da_variavel’] = ‘valor’;

Supondo que você queira usar Sessions para controle de login, o ideal é que seja criada uma array em $_SESSION específica para essa tarefa, com elementos que conterão os devidos valores. Exemplo:

  • $_SESSION[‘mysite’] = array(‘user’ => $usuario, ‘access’ => $acesso);

Dessa forma quando se quiser eliminar todas as variáveis referentes a isso é só usar unset($_SESSION[‘mysite’])

Finalizando uma sessão

Caso desejemos finalizar a sessão (o famoso logout) devemos fazer chamada à função session_destroy(), mas antes disso é necessário que todas as variáveis da sessão sejam destruídas, por meio de unset($_SESSION[‘variavel’]) – lembrando que nunca deve ser usado unset($_SESSION) no meio do script, pois isso tornará o uso posterior de sessões inacessível.

Lembrando que a sessão será automaticamente finalizada por inatividade ou fechamento do browser.

Criando o código

Estarei expondo aqui um código simples que inclui basicamente forms HTML e o script PHP para o sistema de login.

Eplicações estão em comentários.

Script

 

<?php session_start();mysql_connect('localhost', 'root', '');mysql_select_db('testes');// Checando se o usuário já está logadoif(isset($_SESSION['mysite'])){	// Deslogando?	if($_POST['action'] == 'logout') {  logout();  echo 'Você saiu do sistema';  echoLoginForm();  return;	}	// Simplesmente visitando a página	echo 'Logado como <b>'.$_SESSION['mysite']['user'].'</b><br />';	echoLogoutForm();	return;}// Assumindo que o usuário não está logado...// Checando se o script foi chamado por submit do post de loginif(!$_POST['step']) echoLoginForm();else checkInputs();// Imprime o form para logar no sistemafunction echoLoginForm() {	?>  <form method="post" action="<?=$PHP_SELF?>">  <table> 	 <tr><td>Nick: <input type="text" name="login_nick" value="<?=$_POST['login_nick']?>" /></td></tr> 	 <tr><td>Password: <input type="password" name="login_pass" value="<?=$_POST['login_pass']?>" /></td></tr> 	 <tr><td><input type="submit" value="Logar" /></td></tr>  </table>  <input type="hidden" name="step" value="1" />  </form>		<?php	}	// Imprime o form para deslogar do sistemafunction echoLogoutForm(){	?>  <form method="post" action="<?=$PHP_SELF?>"> 	 <input type="submit" value="Logout"> 	 <input type="hidden" name="action" value="logout">  </form>  	<?php}// Checa as entradas, caso erro este será informado, caso OK a função login() é chamadafunction checkInputs(){	$erro = false;		// Campo Nick vazio?	if(!$_POST['login_nick']) {   echo 'Campo <b>Nick</b> vazio! <br />';   $erro = true;	}	// Campo Password vazio?	if(!$_POST['login_pass']) {  echo 'Campo <b>Password</b> vazio! <br />';  $erro = true;	}	// Nenhum Campo vazio? Vamos então checar as entradas	if(!$erro){  $rst = mysql_query('SELECT * FROM users WHERE nick="'.$_POST['login_nick'].'" AND password="'.$_POST['login_pass'].'"');  // Caso a query tenha falhado - nenhum resultado retornado  if(mysql_num_rows($rst) < 1){ 	 echo '<b>Password</b> e/ou <b>usuario</b> incorretos <br />'; 	 $erro = true;	  }	}	// Nenhum erro, vamos logar no sistema	if(!$erro) login();	// Erro? Então reimprimimos o form de login	else echoLoginForm();}// Realiza o login no sistemafunction login(){	$rst	= mysql_query('SELECT id FROM users WHERE nick="'.$_POST['login_nick'].'"');	$usr_id = mysql_result($rst, 'id');	// Configura as variáveis de sessão	$_SESSION['mysite'] = array('user' => $_POST['login_nick'], 'usr_id' => $usr_id);	echo 'Logado como <b>'.$_POST['login_nick'].'</b>';	echoLogoutForm();}// Desloga do sistemafunction logout(){	unset($_SESSION['mysite']);	session_destroy();	}

 

Com esse script eu tentei, além de tudo, demonstrar que não é preciso criar-se vários scripts com pouco conteúdo cara para que realizem tarefas extremamente específicas, podemos fazer tudo em um script só.

Infelizmente pelo fato de o fórum não ter sistema de coloração de sintaxe PHP o código esteja um pouco difícil de ler, mas darei a idéia.

Quaisquer dúvidas é só postar!

 

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

É claro que seria mais seguro, nesse exemplo eu suqu erfiltro a entrada do usuário.

A idéia é expor o esqueleto básico do sistema, mas já enfatizando que copiar e colar esse código não vai ajudar muito.

Link para o comentário
Compartilhar em outros sites

  • 9 months later...

eu axei q este forum e' complicado n~ sei se estou na area serta+

 

la vai. eu mori e achei um char q tinha me roubado , ai o jogo me logou. n~foi a primeira fez q isto acondase.

axo q deve der um programa para loga os char dos outros e o cara me logo.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...