Uma tarefa freqüentes para desenvolvedores é criar uma área de membros de um site. Isto implica normalmente uma inscrição, uma página de login, e depois o acesso a uma seção do site que está disponível apenas para usuários registrados.
Para este exemplo, vamos utilizar um banco de dados MS SQL Server, caso não tenha o SQL, você só precisa alterar o código de conexão,vamos criar um novo banco de dados chamado testdb, e crie uma nova tabela chamada membros. Adicione as seguintes colunas:
| Nome Campo | Tipo de Dados | Tipo de dados Access | Notas |
| id | int (AutoIncrement=True) | AutoNumber | Primary Key |
| username | varchar (20) | Text (FieldSize=20) | Unique |
| password | varchar (20) | Text (FieldSize=20) |
Agora, vamos criar um pequeno script que se conecta ao banco de dados. Salve-o como inc-dbconnection.asp.
<%
Dim objConn
‘Criar um objeto de conexão A
Set objConn = Server.CreateObject("ADODB.Connection")
‘abre a conexão ao banco de dados
’sqlservername = o nome do servidor SQL
‘accessdb = o caminho para o acesso a partir db este script
‘username = nome de usuário para se conectar ao db
‘password = senha para se conectar ao db
'// Use isso para o SQL Server
objConn.Open ="Provider=sqloledb;Data Source=xanburzum;Initial Catalog=siscom;User;Password=;"
'// Use isso para Access
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("accessdb")
%>
Formulário
Agora, o banco de dados foi criado, nós podemos criar a nossa página de inscrição onde os novos membros podem se registar. Primeiro, vamos obter o código HTML básico juntos.
<html>
<head>
<title> </title>
</head>
<body>
<h1> Cadastro de Membros</h1>
<p> Por favor preencha o seguinte formulário para se registrar como um membro e ter acesso a nossa área de membros.</p>
<form action=”register.asp” method=”POST”>
<input value=”register”>
<table border=”0″>
<tr>
<td><b>Username</b></td>
<td><input maxlength=20></td>
</tr>
<tr>
<td><b>Password</b></td>
<td><input maxlength=20></td>
</tr>
<tr>
<td><b> Confirme Password </b></td>
<td><input maxlength=20></td>
</tr>
<tr>
<td> </td>
<td><input value=”Completar Registro”></td>
</tr>
</table>
</form>
</body>
</html>
Vamos verificar se o formulário foi submetido, podemos fazer isso verificando o valor do campo de ação, que é na verdade um campo oculto no formulário:
‘ver se o formulário foi submetido
If Request.Form ( “action”) = “ register” Then
‘O formulário foi submetido
Agora sabemos que o formulário foi submetido, é preciso validá-lo. Há uma série de coisas que temos de verificar:
• Se entrou com um username
• Se Password digitado
• Se Password são os mesmos
O último item na lista não pode ser feito até que se conectar ao banco de dados, por isso, deixar que a validação para última.
Podemos usar o seguinte código para verificar se estes estão corretos. Se um erro ocorrer, nós adicionamos a seguinte mensagem de erro para strError.
Dim strError
‘validar o formulário
'check se o username foi digitado
If Request.Form("username") = "" Then strError = strError & "- Porfavor entre com um username<br>" & vbNewLine
'check se a password foi digitada
If Request.Form("password") = "" Then strError = strError & "- Porfavor entre com o password<br>" & vbNewLine
‘verificar se as senhas são as mesmos … Mas não exibir se o campo senha estiver em branco
If Request.Form("password") <> Request.Form("password_confirm") _
And Request.Form("password") <> "" Then _
strError = strError & "- Suas senhas não coincidem <br>" & vbNewLine
Uma vez que tenhamos realizado a validação, verificamos se strError contém qualquer texto. Se isso acontecer, ocorreu um erro, e apresentamos uma mensagem. Caso contrário, podemos continuar:
If strError = "" Then
'continue
End If
If strError <> "" Then
’saída a mensagem de erro
‘HTML add extra …
strError = "<p><font color=""#FF0000""> Os seguintes erros ocorreram:</font><br>" & vbNewLine & strError
End If
Você pode se perguntar por que não condensamos este código em uma If … Then … Else. Isso ocorre porque strError pode muito bem ser preenchido dentro do bloco continuar, por isso queremos verificar se não está vazio de novo.
Agora, precisamos adicionar algum código extra, a fim de mostrar o erro de validação que ocorreram, e também de nenhum texto que o usuário tenha introduzido. Por exemplo
<input maxlength=20>
torna-se
<input maxlength=20 value=”<%=Server.HTMLEncode(Request.Form(“username”))%>”>
| Nota Embora na maioria dos casos, <input type = “text” name = 20 maxlength = “username” value =”<%= Request.Form ( “username “)%>”> seria perfeitamente suficiente, podemos adicionar o comando Server.HTMLEncode para garantir que qualquer engraçadinho entre com caracteres (como < e “)ainda são exibidos corretamente. |
Você pode ver o resto do código para adicionar a versão final do Register.asp, vamos criar a entrada do usuário no banco de dados (e verificar o usuário). Nesta fase, precisamos incluir o código de conexão de dados:
<!–#include file=”inc-dbconnection.asp”–>
e agora podemos executar uma instrução SQL para criar o novo registro:
On Error Resume Next
sSQL = "INSERT INTO members (username,password) VALUES " & _
"('" & fixQuotes(Request.Form("username")) & "','" & _
fixQuotes(Request.Form("password")) & "')"
cConn.Execute sSQL
Esse procedimento substitui todas as ocorrências de com os campos de username e password. Se não fizesse isso, iria ocorrer um erro quando um usuário entrasse com o campo username ou password.
Uma vez que esta declaração tenha sido executada, é preciso verificar se ocorreu um erro, se tiver, provavelmente há um conflito com uma entrada existente na base de dados (ou seja, o usuário já está em uso)
If Err.Number = -2147217900 Then
‘ATENÇÃO: este número de erro precisa ser alterado, dependendo do formato de banco de dados você está usando
strError = “- Esse usuário já está em uso. Por favor escolha outro.<br>” & vbNewLine
ElseIf Err.Number <> 0 Then
strError = “- Ocorreu um erro. ” & Err.Number & ” : ” & Err.Description & “<br>” & vbNewLine
Else
’restaurar o tratamento de erros padrão
On Error Goto 0
’registro criado … redirecionar
Response.Redirect “login.asp?msg=” & _
Server.URLEncode(“Obrigado por se registar. Por favor, faça o login usando seu nome de usuário e senha”)
Response.End
End If
‘restaurar o tratamento de erros padrão
On Error Goto 0
Nosso formulário de registro está completo. Agora podemos criar o nosso formulário de login.
register.asp
<%
Option Explicit
Dim strError, strSQL
‘ver se o formulário foi submetido
If Request.Form(“action”)=”register” Then
‘O formulário foi submetido
‘/ / Validar o formulário
‘verificar se um usuário foi digitado
If Request.Form(“username”) = “” Then _
strError = strError & “- Por favor, indique um nome de usuário<br>” & vbNewLine
’verificar se uma senha foi digitada
If Request.Form(“password”) = “” Then _
strError = strError & “- Por favor entre com o password<br>” & vbNewLine
’verificar se as senhas são as mesmos … Mas não exibi-lo se o campo senha é em branco.
If Request.Form(“password”) <> Request.Form(“password_confirm”) _
And Request.Form(“password”) <> “” Then _
strError = strError & “- As senhas não coincidem<br>” & vbNewLine
’// verificar se ocorreu um erro
If strError = “” Then
‘continue
’include conexao
%>
<!–#include file=”inc-dbconnection.asp”–>
<%
On Error Resume Next
‘// cria SQL
strSQL = “INSERT INTO members ([username],[password]) VALUES ” & _
”(‘” & fixQuotes(Request.Form(“username”)) & “‘,’” & _
fixQuotes(Request.Form(“password”)) & “‘)”
‘// executa SQL
objConn.Execute strSQL
‘// check se teve erro
‘// ATENÇÃO: este deve ser alterado, dependendo do fornecedor de banco de dados
If Err.Number = -2147467259 Then
strError = “- Esse usuário já está em uso. Por favor escolha outro<br>” & vbNewLine
ElseIf Err.Number <> 0 Then
strError = “- Ocorreu um erro. ” & Err.Number & ” : ” & _
Err.Description & “<br>” & vbNewLine
Else
’registro criado … redirecionar
Response.Redirect “login.asp?msg=” & Server.URLEncode(“Obrigado por se registrar”)
Response.End
End If
On Error Goto 0
End If
If strError <> “” Then
’saída a mensagem de erro
‘HTML add extra …
strError = “<p><font color=”"#FF0000″”> Os seguintes erros ocorreram:” & _
“</font><br>” & vbNewLine & strError
End If
End If
Function fixQuotes(strData)
fixQuotes = Replace(strData,”‘”,”””)
End Function
%>
<html>
<head>
<title> </title>
</head>
<body>
<h1> Cadastro de Membros</h1>
<p> Por favor preencha o seguinte formulário para se registrar como um membro, e
acesso a nossa área de membros.</p>
<%=strError%>
<form action=”register.asp” method=”POST”>
<input value=”register”>
<table border=”0″>
<tr>
<td><b>Username</b></td>
<td><input maxlength=20
value=”<%=Server.HTMLEncode(Request.Form(“username”))%>”></td>
</tr>
<tr>
<td><b>Password</b></td>
<td><input maxlength=20
value=”<%=Server.HTMLEncode(Request.Form(“password”))%>”></td>
</tr>
<tr>
<td><b> Confirmar Password </b></td>
<td><input maxlength=20
value=”<%=Server.HTMLEncode(Request.Form(“password_confirm”))%>”></td>
</tr>
<tr>
<td> </td>
<td><input value=”Complete Registration”></td>
</tr>
</table>
</form>
</body>
</html>
O formulário de login é um assunto relativamente simples. Ele avisa o usuário para um nome de usuário e senha, valida-lo no banco de dados e, se a combinação username / password é válido, ele salva uma variável de sessão.
Usando sessões requer o uso de cookies (a menos que você estiver usando ASP.NET, que permite que o valor da sessão para ser armazenada na URL) – Os usuários com cookies com deficiência não será capaz de login.
login.asp
<%
Option Explicit
Dim strError, strSQL, objRS
‘ver se o formulário foi submetido
If Request.Form(“action”)=”login” Then
’O formulário foi submetido
’// valida o form
If Request.Form(“username”) = “” Then _
strError = strError & “- Por favor, indique um nome de usuário<br>” & vbNewLine
’verificar se entrou com senha
If Request.Form(“password”) = “” Then _
strError = strError & “- Por favor entre com o password<br>” & vbNewLine
’// verificar se ocorreu um erro
If strError = “” Then
‘continue
’include de conexao
%>
<!–#include file=”inc-dbconnection.asp”–>
<%
‘// cria SQL
strSQL = “SELECT id,password FROM members WHERE username=’” & _
fixQuotes(Request.Form(“username”)) & “‘”
‘// executa a SQL
Set objRS = objConn.Execute (strSQL)
‘// ver se existem quaisquer registos retornados
If objRS.EOF Then
‘username não encontrado
strError = “- ‘username Invalido ou password incorreta<br>” & vbNewLine
Else
‘check password
If objRS(“password”)=Request.Form(“password”) Then
‘nome de usuário e senha válidos
’salvar os dados da sessão
Session(“loggedin”) = True
Session(“userid”) = objRS(“id”)
‘redirecionar para membros da área
Response.Redirect (“default.asp”)
Response.End
Else
‘ password Invalido
strError = “- Nome de usuário ou senha inválidos<br>” & vbNewLine
End If
End If
End If
If strError <> “” Then
strError = “<p><font color=”"#FF0000″”> Os seguintes erros ocorreram:” & _
“</font><br>” & vbNewLine & strError
End If
‘mensagem de exibição de URL .. (Obrigado por se registar)
If Request.QueryString(“msg”) <> “” And strError = “” Then
strError = “<p>” & Request.QueryString(“msg”) & “</p>”
End If
End If
Function fixQuotes(strData)
fixQuotes = Replace(strData,”‘”,”””)
End Function
‘dados da sessão re-set log out
Session(“loggedin”)=”"
Session(“userid”)=”"
%>
<html>
<head>
<title> Área de Membros Login</title>
</head>
<body>
<h1> Área de Membros Login</h1>
<p> Por favor digite seu nome de usuário e senha para acessar a área dos membros.</p>
<%=strError%>
<form action=”login.asp” method=”POST”>
<input value=”login”>
<table border=”0″>
<tr>
<td><b>Username</b></td>
<td><input maxlength=20
value=”<%=Server.HTMLEncode(Request.Form(“username”))%>”></td>
</tr>
<tr>
<td><b>Password</b></td>
<td><input maxlength=20
value=”<%=Server.HTMLEncode(Request.Form(“password”))%>”></td>
</tr>
<tr>
<td> </td>
<td><input value=”Login”></td>
</tr>
</table>
</form>
</body>
</html>
Uma grande parte desse código é quase idêntico ao do Register.asp. O primeiro código verifica se o formulário foi enviado. Se sim, usamos a mesma técnica de validação de antes, para ver se um nome de usuário e senha foi especificada. Se não tiver é exibido uma mensagem de erro. Se tiver, ele verifica o nome de usuário e a senha, consultando o banco de dados para o usuário.
Em seguida se objRS.EOF, o usuário não foi encontrado; mostrar mensagem de erro. Caso contrário, nós verificamos a senha do banco de dados e comparmos ao que o usuário acabou de entrar. Mais uma vez, se estiverem incorretos, temos que dizer ao usuário.
Se o nome de usuário / senha estiver correta, podemos definir o valor 1 na sessão de dados loggedin, e também guardar o ID do usuário. Essas variáveis estão disponíveis na sessão da login.asp, para que as páginas de nossos membros verifique se está conectado ou não. Portanto, uma vez definida, nós simplesmente redirecionamos para default.asp; a home page membros.
Voce pode implementar sua área de diversas formas, que depende de você, como por exemplo, em um artigo anterior, onde temos um sistema administrativo, completo, onde podemos, pesquisar,inserir,excluir,atualizar,selecionar, enviar senha perdida,trocar senha, etc, você precisa incluir em todos os membros de sua página é uma seção para verificar se o usuário estiver conectado ou não. Se eles não são automaticamente redirecionados para a página de login.
| default.asp
<% If Session(“loggedin”) <> True Then Response.Redirect “login.asp” %> <html> <head> <title> </title> </head> <body> <h1>Área de usuário</h1> <p>Aqui você pode implementar sua área.!</p></body> </html> |
Se você tentar acessar default.asp antes de você ter entrado no fórum: – você não pode!
Uma vez que você entrou, se você visitar login.asp novamente, você será automaticamente desconectado. Então, se você quiser um link “Log Out” na área de membros, basta acessar login.asp ou criar um logout, por exemplo:
<%response.buffer=true%>
<%Session.abandon%>
Ou tambem,
response.expires = 0
response.expiresabsolute = Now() -1
response.addHeader “pragma”,”no-cache”
response.addHeader “cache-control”,”private”
Response.CacheControl = “no-cache”
Session.Contents.RemoveAll()
Session.Abandon
Voce pode depois implementar seu banco de dados com o campo chamado nivel do tipo numérico. Onde iremos utilizar 3 níveis diferentes (1, 2 e 3).
Podemos, por exemplo após fazer o login, verificar qual o nível de acesso o usuário, terá em nosso sistema.
<!–#include file=”inc-dbconnection.asp”–>
<%
‘pegamos o login através da session
username = Session(“userid”)
‘login esta correto, pois veio através da session
‘Vamos então verificar o nível de acesso do usuário.
session(“nivel_acesso”) = objRS(“nivel”) ‘ session para utiliza-las em outras páginas
Response.Redirect “adm.imistracao.asp” ‘página restrita
‘A primeira coisa a ser feita é verificar se o usuário está logado
If Session(“loggedin”) = “” Then
Response.Write “Você não está logado!”
Response.End
End If
‘verificarmos o nivel de acesso do usuário e inserirmos o conteúdo correspondente
‘voce pode fazer um menu , no nosso caso alguns links
If session(“nivel_acesso”) = 3 Then ‘admin
%>
<a href=”consultar.asp”>Consultar artigo </a>
<a href=”inserir.asp”>Inserir artigo </a>
<a href=”alterar.asp”>Alterar artigo < /a>
<a href=”excluir.asp”>Deletar artigo </a>
<a href=”search.asp”>Pesquisa Avançada</a>
<a href=”log.asp”>Verificar Log</a>
<a href=”notificar.asp”>Notificar usuário </a>
<%
Elseif session(“nivel_acesso”) = 2 Then ‘Moderadores
%>
<a href=”consultar.asp”>Consultar artigo </a>
<a href=”alterar.asp”>Alterar artigo </a>
<a href=”excluir.asp”>Deletar artigo </a>
<a href=”search.asp”>Pesquisa Avançada</a>
<a href=”notificar.asp”>Notificar artigo </a>
<%
Else ‘usuario
%>
<a href=”consultar.asp”>Consultar artigo </a>
<%
End If
%>
E para bloquear o acesso , sempre verifique a session(“nivel_aecsso”) , para evitar de um usuário digitar a URL excluir.asp no browser, e ter acesso. Por isso, em cada página com acesso restrito, precisamos fazer a verificação do nível de acesso.
<%
If session(“nivel_aecsso”) < 3 Then ’se não for admin
Response.Write “Você não tem autorização para ver esta página!”
Response.End
End If
%>










ShareThis
Valeu cara, muito útil essas explicações. Um abraço e ótimo 2010.