MXStudio » ASP.net Banco de Dados Programação » ASP – Área de membros e nível de acesso

ASP – Área de membros e nível de acesso

 
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
%>


Assine o nosso Feed
1.404 assinantes,
assine você também!
Publique esse artigo no Twitter Salve este artigo no Delicious Cadastre esse artigo no Dihitt Cadastre esse artigo no UEBA Cadastre esse artigo no Rec6

1 Comment to ASP – Área de membros e nível de acesso

  1. Janeiro 4, 2010 at 7:54 pm | Permalink

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

Deixe um Comentario

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

X@nBuRzUm

Últimos Artigos do Autor