+8

Validação de Usuários utilizando Sessions e MySQL

criado por Italo Marcelo de O. Costa em 04/09/2002 12:37pm
Este artigo tem a finalidade de explicar os tratamentos de sessions em PHP utilizando banco de dados MySQL. Muitos usuários se questionam como utilizar sessions e verificar se o usuário existe ou não no banco de dados. Com isso, irei tentar explicar como fazer um esquema de login utilizando sessions e MySQL buscando o público alvo iniciante que está com problemas na hora de montar as sessões com o seu banco de dados.

Antes de começar, gostaria de deixar bem claro que não vou usar firulas nos scripts, pois somente irei demonstrar a função deste. Vamos pensar na tela de login onde o usuário entrará com o login e a senha. Bom, a idéia principal seria criar a sessão USUARIO para que todos os scripts utilizem esta mas já temos que pensar na volta, ou seja, quando o usuário sair do sistema. Então, o script de login começa assim?

script index.php:

<?php
// se a sessão existir, vou destrui-la.
if  ($USUARIO) {
    session_destroy(“USUARIO”);
}

echo “<form method=post action=verifica_sessao.php>”; 	
echo “Login<input type=text name=login><br><br>”;
echo “Senha<input type=password name=senha><br><br>”;
echo “<input type=submit value=INICIAR SESSAO><br><br>”;
echo “</form>”;
?>

Agora vamos registrar o usuário na sessão e entrar no sistema.

script verifica_sessao.php:

<?php
$USUARIO[0] = $login;
$conc = $login.$senha;
$USUARIO[1] = $senha;
$session_register(“USUARIO”);
?>
<script language="Javascript">
<!--
window.open("principal.php","_parent");
//-->
</script>

Após ter registrado este usuário na sessão, o sistema tem que validar em todos os scripts se este usuário e senha existe realmente no banco, da seguinte maneira:

script principal.php:

<?php
session_start(); // estou inicializando a sessão
$login = $USUARIO[0]; // estou pegando o valor gravado na sessão USUARIO na posição 0 (zero)
$senha = $USUARIO[1];
$sql = ”SELECT nome FROM tabela_usuarios WHERE usr=’$login’ AND passwd=’$senha’”;
include “conexao.inc”; // imaginando que aqui estou conectando no banco com host, usuário, senha e base de dados e retornando uma variável $cone com a conexão

$logado = mysql_fetch_array(mysql_query($sql,$cone));
if ($logado[0]) {
    echo “Seja bem vindo usuário $logado[0]”; // boas vindas com o nome do usuário
    // ou poderia montar a pagina dinâmica ou estática, dependendo do problema.
} else {
    echo “<a href=index.php target=_parent>Usuário Inexistente</a>”;
}
?>

Bom pessoal, como disse esta é uma maneira simples de validar usuários no seu sistema mas não pode esquecer de que todos os scripts tem que ter esta checagem senão não dá certo.

A intenção foi a das melhores e espero ter ajudado. Abraço a todos.

Comentários:

Mostrando 1 - 10 de 47 comentários
Cézar Ayran disse:
Warning: session_register() [function.session-register]: Cannot send session cookie - headers already sent by (output started at...

Que faço?
Código:

$USUARIO[0] = $usuario_login;
$USUARIO[1] = $usuario_senha;
$conc = $usuario_login.$usuario_senha;
session_register("USUARIO");
27/05/2009 8:08pm (~15 anos atrás)

Fabio Jordão disse:
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\sistema_historico\principal.php on line 8

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\sistema_historico\principal.php on line 8

O erro é na linha abaixo:
$logado = mysql_fetch_array(mysql_query($sql,$cone));
15/05/2007 9:21am (~17 anos atrás)

Parabéns Italo! Mt bom o tutorial!

Só tenho dúvida quanto ao logout. Quando eu volto pra página de login e entro com outro usuário, a session continua gravada com o usuário anterior.

Como eu faço pra logar com outro usuário sem ter q fechar a janela????
19/07/2006 4:18am (~18 anos atrás)

Igor Cesar disse:
Gente eu estou com a seguinte dúvida. Por exemplo, eu tenho uma página que roda um script php de validação de usuários com sessions e no meu script tem uma linha tipo a desse artigo que é o session_destroy(); e eu fiquei em dúvida se por acaso um usuário se loga no sistema ai depois vem outro e se loga mas ai pra se logar, ele acessa o script que tem a linha destroy bom, em fim, o que eu quero saber é se um usuário pode fechar uma session que um outro abriu se ele rodar o script com session_destroy.
Bom, obrigado pela ajuda.
31/03/2006 12:10pm (~18 anos atrás)

Rodrigo Paulo disse:
tentei varias vezes mais infelizmente o erro é o mesmo:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\arquivos de programas\apache group\apache\htdocs\site\admin\principal.phpon line 19 ja mudei as variaveis, e nada! o q acontece?
Vi algo no seu codigo q não entendi, em vez de variavel $conc = $login.$senha;(verifica_sessao.php) não seria $cone = $login.$senha;? Valeu e tenha um bom feriado.
14/11/2005 9:15am (~18 anos atrás)

Luiz Tarabal disse:
Não sei pra que tanta tempestade num copo dagua, uma simples verificaçao de caracters QUE NAO DEVEM SER lidos ja resolvem este poblema de sql injection

if (strlen(ereg("[(.#$%&*,;.!?)]", $usuario)) != 0) {
echo "<script>window.alert(\"Por razões de segurança você não pode usar estes caracters no usuário (.#$%&*,;.!?)!, tente novamente!\");</script>";
echo "<meta http-equiv='refresh' content='0;URL=index.php'>";
exit; }

quero ver alguem "burlar a segurança" com esta regra...

abraços a todos os companheiros do phpbrasil
28/10/2005 11:39am (~18 anos atrás)

Olá, estou com o seguinte erro
Warning: Cannot send session cache limiter - headers already sent (output started at C:/XITAMI/webpages/teste/verifica_sessao.php:1) in C:/XITAMI/webpages/teste/verifica_sessao.php on line 2
Alguém pode me ajudar a resolver???
grato
23/08/2003 9:01pm (~20 anos atrás)

Até então eu utilizava um controle de usuários com session bastante simples sujeito a falha de segurança.
Juntei o artigo do Italo, mais as opniões e dicas dos colegas Rafael Farias e Ricardo Guedes e melhorei e muito meu controle de usuários. Valeu Pessoal!!!
06/07/2003 6:12pm (~21 anos atrás)

Vc pode fazer isso com um if.

se usuario não estiver logado entre na página de login, caso já esteja logado, entre na pagina.

&lt;?php
if ($usuario=="") {
echo "&lt;META Http-equiv='refresh' content='0;url=login.php&gt;";}
else {
echo "&lt;META Http-equiv='refresh' content='0;url=index.php&gt;";}
?&gt;

bem, este é um php bem simples, só para te dar uma ideia de como pode fazer.
19/02/2003 1:19pm (~21 anos atrás)

Rodrigo,
Dê uma olhada no ini_set() se é possivel alterar runtime no server:
http://www.php.net/manual/pt_BR/function.ini-set.php
Ler os comentários (em ingles).
16/01/2003 6:06am (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)