Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marrabel

Login + Contador de Tentativas

Recommended Posts

Venho aqui deixar um código que finalizei a pouco tempo.

 

Um sisteminha que faz a validação de login e senha, faz a contagem das tentativas e se esta tentativa ultrapassar 3, ele bloqueia o usuario. Tudo armazenado em um banco de dados para que fique mais seguro.

 

Formulário:

 

<%Response.Expires=0
Response.Buffer=True
%>
<% if Request.QueryString("em")="branco" then%>
Preencha todos os campos!<p>
<%else%>
<%end if%>
<% if Request.QueryString("user")="logoff" then%>
Deslogado com sucesso! Volte Sempre!<p>
<%else%>
<%end if%>
<%if request.QueryString("erro")="negado" then%>
Login/Senha invalidos!<p>
<%else%>
<%end if%>
<%if request.QueryString("user")="bloqueado" then%>
Usuário Bloqueado! Acesse seu e-mail para desbloqueio!<p>
<%else%>
<%end if%>
Entre com seu login e senha
<form method="post" action="login.asp">Login: <input type="text" name="login" size="14">
Senha: <input type="password" name="senha" size="14">
<input type="submit" value="Logar"></form>

 

Página que valida os dados:

 

<!--#include file="../conexao.asp"-->              	'pagina que contem a string de conexao do seu banco de dados'
<%
login = Trim(Request.Form("login"))     			'retira o espaco antes e depois do que foi inserido nos campos de login e senha'
senha = Trim(Request.Form("senha"))

sql="SELECT * FROM usuarios where login='" & login & "' and senha='" & senha & "'"	' aqui verifica se o usuario ou a senha existem no Banco de dados
Set rsLog = conn.execute(sql)  'cria um RecordSet para execução do comando
If rsLog.EOF then  'se o registro chegou ao final significa que não foi encontrado o registro, login invalido
If Len(Session("tentativas")) < "0" Then  'se é a primeira tentativa registra como 1
		Session("tentativas") = "1"
	Else
		If Session("tentativas") < 3 Then  se ainda não atingiu o máximo de tentativas, soma-se mais 1
			tentativas = Session("tentativas") + 1
			Session("tentativas") = tentativas
			strSQL="UPDATE usuarios set tentativas='" & Session("tentativas") & "' WHERE login='" & login & "'" 'atualiza o campo no banco de dados, baseando-se no login digitado
			set rsTent=conn.execute(strSQL)
			Response.Redirect("default.asp?erro=negado") 'retorna para a página de login com o erro
		End if
		If Session("tentativas") = 3 or Session("tentativas") > 3 Then ' se as tentativas chegaram no máximo, ou seja, 3
			strBloq="UPDATE usuarios SET bloqueado=1 WHERE login='" & login & "' AND tentativas=3" 'atualiza a tabela bloqueado para 1, ou seja, o login está bloqueado!
			set rsBloq=conn.execute(strBloq) 'executa o comando atraves do recordset
			Session("user")="bloqueado" 'define esta instrução com a seção -- bloqueado
			Response.Redirect("default.asp?user=bloqueado") 'retorna com o devido erro
		End If
End if
Else ' se o login ou senha existirem
	sql2="SELECT * FROM usuarios" 'seleciona todos os dados da tabela
	set rsNOK=conn.execute(sql2) 
		If rsNOK("bloqueado")=1 Then 'verifica se o usuario esta bloqueado ou não
			Response.Redirect("default.asp?user=bloqueado") 'se estiver, retorna com o erro
		Else 'caso contrario
			Session("status") = "ok" 'login efetuado
			Response.Redirect("home.asp?us=" & rsLog("id_usuario") & "")
			sqlOK="UPDATE usuarios set tentativas=0,bloqueado=0 WHERE login='" & login & "'" 'aqui representa que se o usuario logar, as tentativas zeram
			set rsOK=conn.execute(sqlOK)
			Session("nome")=rsLog("nome_usuario")
		End if
End if
%>

 

Espero que seja útil para alguem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma pequena alteração no código de validação apontada pelo colega 0cool.

 

Segue então o código corrigido. Mil desculpas pessoal

 


<!--#include file="../conexao.asp"-->               	'pagina que contem a string de conexao do seu banco de dados'
<%
login = Trim(Request.Form("login"))                         	'retira o espaco antes e depois do que foi inserido nos campos de login e senha'
senha = Trim(Request.Form("senha"))

sql="SELECT * FROM usuarios where login='" & login & "' and senha='" & senha & "'"      ' aqui verifica se o usuario ou a senha existem no Banco de dados
Set rsLog = conn.execute(sql)  'cria um RecordSet para execução do comando
If rsLog.EOF then  'se o registro chegou ao final significa que não foi encontrado o registro, login invalido
       If Len(Session("tentativas")) < "0" Then  'se é a primeira tentativa registra como 1
                       Session("tentativas") = "1"
               Else
                       If Session("tentativas") < 3 Then  se ainda não atingiu o máximo de tentativas, soma-se mais 1
                               tentativas = Session("tentativas") + 1
                               Session("tentativas") = tentativas
                               strSQL="UPDATE usuarios set tentativas='" & Session("tentativas") & "' WHERE login='" & login & "'" 'atualiza o campo no banco de dados, baseando-se no login digitado
                               set rsTent=conn.execute(strSQL)
                               Response.Redirect("default.asp?erro=negado") 'retorna para a página de login com o erro
                       End if
                       If Session("tentativas") = 3 or Session("tentativas") > 3 Then ' se as tentativas chegaram no máximo, ou seja, 3
                               strBloq="UPDATE usuarios SET bloqueado=1 WHERE login='" & login & "' AND tentativas=3" 'atualiza a tabela bloqueado para 1, ou seja, o login está bloqueado!
                               set rsBloq=conn.execute(strBloq) 'executa o comando atraves do recordset
                               Session("user")="bloqueado" 'define esta instrução com a seção -- bloqueado
                               Response.Redirect("default.asp?user=bloqueado") 'retorna com o devido erro
                       End If
       End if
       Else ' se o login ou senha existirem
               sql2="SELECT * FROM usuarios" 'seleciona todos os dados da tabela
               set rsNOK=conn.execute(sql2) 
                       If rsNOK("bloqueado")=1 Then 'verifica se o usuario esta bloqueado ou não
                               Response.Redirect("default.asp?user=bloqueado") 'se estiver, retorna com o erro
                       Else 'caso contrario
                               Session("status") = "ok" 'login efetuado
                               sqlOK="UPDATE usuarios set tentativas=0,bloqueado=0 WHERE login='" & login & "'" 'aqui representa que se o usuario logar, as tentativas zeram
                               set rsOK=conn.execute(sqlOK)
                               Session("nome")=rsLog("nome_usuario")                         	
                               Response.Redirect("home.asp?us=" & rsLog("id_usuario") & "")                     	End if
End if
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ficou bom....

simples e funcional

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.