Sistema de Login em ASP – Parte II
Bom pessoal, meu nome é Maurício Júnior, sou MCP Microsoft WebApplication, possuo três livros publicados pela editora Ciência Moderna, trabalho na empresa Stefanini IT Solution e faço parte da comunidade ASPNETI.COM.
Irei mostrar como criar um sistema de login usando componente COM + (COM PLUS) com banco de dados. O primeiro de tudo a primeira página HTML foi criada no artigo anterior.
Anteriormente a página Login.asp foi criada mandando uma requisição para a página frmLoginPersistir.asp do método post, ou seja, os valores passados não serão mostrados URL da página do cliente do usuário. (2.1 – Sistema de Login
<script language="javascript"> function sFoco(){ if (document.frmLogin.txtUsuario){ document.frmLogin.txtUsuario.focus(); } } function sValidarLogin(){ if (f_eVazio(document.frmLogin.txtUsuario.value)){ alert(f_Mensagem(1)); document.frmLogin.txtUsuario.focus(); return; } if (f_eVazio(document.frmLogin.txtSenha.value)){ alert(f_Mensagem(1)); document.frmLogin.txtSenha.focus(); return; } document.frmLogin.method = 'post'; document.frmLogin.action = 'frmLoginPersistir.asp'; document.frmLogin.submit(); } function sSair(){ window.close(); } function s_AlterarSenha(){ document.frmLogin.method = 'post'; document.frmLogin.action = 'frmAlterarSenha.asp'; document.frmLogin.submit(); } function enter(codigo){ if (codigo == 13){ sValidarLogin(); } } </script> <body topmargin="0" leftmargin="0" onload="sFoco();"> <form name="frmLogin"> <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%"> <!--#include file="../includes/barra_titulo.asp"--> <tr align="left"> <td align="center"><!-- Inicio da Página --> <table CELLSPACING="1" cellpadding="0" class="formulario" width="230px"> <tr> <th colspan="4">Login</th> </tr> <tr> <th width="18">01</th> <td> <b> Usuário:</b> <br> <input name="txtUsuario" onkeypress="enter(event.keyCode);" value="<%=Request("txtUsuario")%>" size="25" style="HEIGHT: 17px"> </td> <td rowspan="2" width="40px" valign="middle"> <br> <img style="background:none" SRC="../images/login.gif" WIDTH="35" HEIGHT="33"> </td> </tr> <tr> <th width="18">02</th> <td> <b>Senha:</b> <br> <input type="password" onkeypress="enter(event.keyCode);" name="txtSenha" value="<%=Request("txtSenha")%>" size="25" style="HEIGHT: 17px"> </td> </tr> </table> <table class="formulario" cellSpacing="1" cellPadding="0" width="230px"> <tr> <th align="middle"> <input type="button" value="Entrar" name="btnEntrar" onclick="sValidarLogin();"> <input type="button" value="Alterar" name="btnAlterar" onclick="s_AlterarSenha();"> <input type="button" value="Sair" name="btnSair" onclick="sSair()"> </th> </tr> </table> </td> </tr> <!--#include file="../includes/barra_rodape.asp"--> </table> </form> </body> |
Referência: 2.1 – Sistema de Login em ASP
Explicação:
Note que o código em vermelho é Java script cujo valida os dados da tela de login passados pelo usuário. Atribui os parâmetros com as variáveis e no final envia para a página frmLoginPersistir.asp. (2.2 – Sistema de Login em ASP)
document.frmLogin.method = 'post'; document.frmLogin.action = 'frmLoginPersistir.asp'; document.frmLogin.submit(); |
Referência: 2.2 – Sistema de Login em ASP
Bom, nessa página que irei fazer a validação junto ao banco de dados usando o componente COM + (COM PLUS) com stored procedure e tudo mais. Resolvi fazer em páginas separadas para ficar mais cômodo, de fácil entendimento e fácil manutenção dos componentes mantendo as camadas separadas.
Dentro da página frmLoginPersistir.asp, tenho que receber os parâmetros e enviá-los ao componente criado com a ferramenta Visual Basic 6.0, que faz suas devidas validações como: pegar os parâmetros, passar para a stored procured que verifica junto ao banco de dados, que por si só retorna uma resposta ao componente que também retorna a página asp. Esse é um caminho resumido de como funciona um sistema usando três camadas com o componente dll registrado no COM PLUS.
Tabela do Banco de dados
Para começar e passar por todo o caminho, geralmente prefiro começar com o banco de dados criando stored procedures e depois ir subindo as camadas.
Para criar o banco de dados corretamente, é necessário analisar detalhadamente todos os campos necessários e depois criá-los.
No caso desse sistema, existirá um código do usuário como chave, ou seja, não poderá se repetir, no valor de no máximo 50 caracteres. Em seguida o nome do usuário com um valor de 100. Uma senha onde será necessário para se logar junto ao sistema. Finalizando um campo para identificar o tipo do usuário, como por exemplo: administrador, usuário normal, inativo e etc, isso em si depende mais do cliente ou da solicitação do cliente. (2.3 – Sistema de Login em ASP).
Referência: 2.3 – Sistema de Login em ASP
Script da tabela do banco de dados
CREATE TABLE [dbo].[TB023_USUARIO] ( [USU_CO_USUARIO] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL , [USU_NO_USUARIO] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [USU_CO_SENHA] [varchar] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [USU_TP_USUARIO] [char] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) ON [PRIMARY] GO |
Referência: 2.4 – Sistema de Login em ASP
Explicação:
Note que o primeiro campo USU_CO_USUARIO significa que será o código do usuário, uma chave primária da tabela, ou seja, não poderá se repetir. O valor máximo de caracter será de 50. Existe um padrão onde até nas tabelas do banco de dados procuro colocar um número seqüencial cujo fica mais fácil identificar todas as tabelas do banco.
Stored Procedure
CREATE PROCEDURE dbo.ASPSP001_VALIDARUSUARIO(@USU_CO_USUARIO VarChar(50), @USU_CO_SENHA VarChar(30)) As Begin SELECT USU_NO_USUARIO, USU_NO_FUNCAO FROM CPETB023_USUARIO WHERE USU_CO_USUARIO = @USU_CO_USUARIO And USU_CO_SENHA = @USU_CO_SENHA and USU_TP_USUARIO = 'A' End GO |
Referência: 2.5 – Sistema de Login em ASP
Explicação:
Primeiro de tudo criei a STORED PROCEDURE conforme referência 2.5. Coloquei o nome de ASPSP001_VALIDARUSUARIO para ficar melhor a identificação, costumo colocar sempre números, nunca se sabe se um sistema terá mais de 200 stored procedures, com isso fica difícil identificar junto ao SQL SERVER Enterprise Manager.
O cabeçalho do da SP, darei o nome de assinatura, apenas para ficar mais fácil. (2.6 – Sistema de Login em ASP).
CREATE PROCEDURE dbo.ASPSP001_VALIDARUSUARIO(@USU_CO_USUARIO VarChar(100), @USU_CO_SENHA VarChar(30)) |
Referência: 2.6 – Sistema de Login em ASP
Passo parâmetros de entrada para SP, a assinatura da procedure perceba que possui os parâmetros (@USU_CO_USUARIO (varchar(100) e @USU_CO_SENHA varchar(30)). Isso significa que receberá esses tipos de parâmetros para fazer um select dentro do banco de dados verificando se existe ou não um usuário. Esses tipos de dados com os valores, por exemplo: varchar(100), mostra que será do tipo string o valor e que no máximo o nome do usuário cadastrado terá o tamanho de 100 caracteres.
A parte em vermelho do script, mostra exatamente como criar um select que verifica se o usuário e senha são válidos. No sistema, já que criei o campo para verificar o tipo do usuário, nesse select tenho que buscar apenas os usuários ativos, dessa forma, tenho que prever no select da SP. (2.7 – Sistema de Login em ASP)
SELECT USU_NO_USUARIO, USU_NO_FUNCAO FROM TB023_USUARIO WHERE USU_CO_USUARIO = @USU_CO_USUARIO And USU_CO_SENHA = @USU_CO_SENHA and USU_TP_USUARIO = 'A' |
Referência: 2.7 – Sistema de Login em ASP
Explicação:
O interessante é que nesse select da referência 2.7, a condição, ou seja, o comando WHERE recebe como parâmetro os valores que recebeu anteriormente com o @ antes. Isso porque todos os parâmetros usados na SP, mesmo sendo como entrada ou apenas dentro, é necessário colocar o @ (arroba) anteriormente. Um padrão que costumo usar é a questão nomenclatura, os valores de entrada geralmente possuem os mesmos nomes da tabela onde será comparado; dessa forma fica difícil de confundir e mesmo de se enganar. O ser humano é cheio de falhas e até para software’s podemos falhar, dependendo da falha pode ser muito prejudicial como segurança de valores, ou seja que envolve muito dinheiro ou apenas um problema de invasão de dados. (2.8 – Sistema de Login em ASP)
WHERE USU_CO_USUARIO = @USU_CO_USUARIO And USU_CO_SENHA = @USU_CO_SENHA and USU_TP_USUARIO = 'A' |
Referência: 2.8 – Sistema de Login em ASP
Explicação:
É interessante notar que, para essa tal verificação de usuário e senha, deve se usar o AND na condição para que o nome do usuário e senha seja verdadeiro simultaneamente. O que quero dizer com isso? Imagina que
A = ativo U = usuário I = inativo |
Referência: 2.9 – Sistema de Login em ASP)
Referência: 3.0
Segue alguns livros que já publiquei.
Site pessoal:
No próximo passo, estarei abordando diretamente o componente COM PLUS. Espero que tenha gostado.
Até a próxima.
Fico por aqui, meu nome é Maurício Júnior.
Se tiver alguma dúvida, pode entrar em contato pelos e-mails:
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.
Related articles
Sistema de Login com ASP 3.0 usando três camadas – Parte I
Descrição do artigo publicado no aspneti.com, cada artigo com seu resumo
Criando XML a partir do DataSet Tipado com Visual Studio.NET 2005 – Parte I
Descrição do artigo publicado no aspneti.com, cada artigo com seu resumo
Sistema de Login em ASP – Parte III
Descrição do artigo publicado no aspneti.com, cada artigo com seu resumo