Utilizando três camadas
Olá pessoal, meu nome é Mauricio Junior. Com esse artigo gostaria de mostrar como é fácil depois da criação do componente, registrar no COM PLUS; utilizando três camadas; chamar uma função do Visual Basic 6.0 usando o ASP 3.0.
Nos passos anteriores mostrei como criar STORED PROCEDURE, banco de dados, Global.asa dentro do Visual Basic 6.0, classes com “functions” e muito mais. Todos os passos anteriores podem ser encontrados no site www.aspneti.com ou www.juliobattisti.com.br/tutoriais/mauricioborges. Espero que possa estar ajudando.
Desenvolvi três páginas básicas para logar no sistema utilizando segurança com os componentes construídos anteriormente. (Referência 10.1).
|
- frmLogin.asp
- frmLoginPersistir.asp
- frmPaginaPrincipal.asp
|
Referência: 10.1
Explicação do funcionamento de cada página.
frmLogin.asp
Essa página é responsável por mostrar os campos obrigatórios de preenchimento usuário e senha. Possui os botões de “Entrar”, “Alterar” e “Sair” dentro da tela. Digitando os valores, são enviados dados via “POST” para a página “frmLoginPersistir.asp”.
frmLoginPersistir.asp
Depois de enviado os dados da página “frmLogin.asp” para “frmLoginPersistir.asp”, a mesma é responsável em criar o objeto da classe “clsSegurança” do Visual Basic 6.0 criado anteriormente, passando os dados necessários para autenticação junto ao banco de dados, cujo o campo senha está criptografado.
frmPaginaPrincipal.asp
A página principal é apenas para mostrar todos os menus montados de acordo com as permissões do usuário. É a página principal do sistema para o acesso às funcionalidades essenciais.
Codificando páginas ASP
* frmLogin.asp (Referência 10.2)
|
<html>
<head><title>..:: SISCPE ::..</title></head>
<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>
</table>
</form>
</body>
</html>
|
Referência: 10.2
Explicação: (Referência 10.2)
Essa página mostra apenas a tela de login onde o usuário entra com usuário e senha para logar no sistema. Como toda página ASP, possue código javascript para tornar as funcionalidades mais dinâmicas e especiais ao usuário que está utilizando o sistema.
A parte em javascript está dividida em “functions”. (Referência 10.3).
|
<script language="javascript">
function sFoco(){
if (document.frmLogin.txtUsuario){
document.frmLogin.txtUsuario.focus();
}
}
function sValidarLogin(){
if (f_eVazio(document.frmLogin.txtUsuario.value)){
alert(“Digite o usuário”);
document.frmLogin.txtUsuario.focus();
return;
}
if (f_eVazio(document.frmLogin.txtSenha.value)){
alert(“Digite a senha”);
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>
|
Referência: 10.3
Explicação Javascript.
Esses códigos javascript, são apenas detalhes da página, serve para validação de campo e tudo mais. Procuro explicar tudo dentro da página que não haja dúvidas.
A primeira function, “sFoco” colocar o foto no campo “txtUsuario” do form. A segunda function “sValidarLogin” valida os campos da tela, como usuário e senha e no final mandar os dados via POST para a página “frmLoginPersistir.asp”. A terceira function “sSair”, tem a funcionalidade de fechar a tela do brownser. A quarta function “s_AlterarSenha” submete para a página “frmAlterarSenha.asp”. A quinta e última function da página chama-se “enter”, verifica se o evento do código é igual a 13, se for, chama a function “sValidarLogin”, ou seja, se o usuário clicar ENTER, automaticamente é chamada a function para validar o form.
O restante de código dessa página é HTML com inputs e buttons. Todos os dados digitados serão enviados para a próxima página.
* frmLoginPersistir.asp (Referência 10.4)
|
<%
Dim oSeguranca
Dim vRetUsuarioPerfil
Dim vRetUsuario
Dim vRetPerfil
Dim iLogin
Dim sCoUsuario
Dim sCoSenha
Const USU_NO_USUARIO_LOGIN = 0
Const USU_NO_FUNCAO_LOGIN = 1
Const PRF_CO_PERFIL_LOGIN = 0
Const PRF_NO_PERFIL_LOGIN = 1
sCoUsuario = Request("txtUsuario")
sCoSenha = Request("txtSenha")
set oSeguranca = Server.CreateObject("CPESeguranca.clsSeguranca")
vRetUsuarioPerfil = oSeguranca.ValidarUsuario(sCoUsuario, sCoSenha)
if IsArray(vRetUsuarioPerfil) then
vRetUsuario = vRetUsuarioPerfil(0)
vRetPerfil = vRetUsuarioPerfil(1)
end if
Session("sPerfilUsuario") = ""
if IsArray(vRetUsuario) then
if IsArray(vRetPerfil) then
session("sCodigoUsuario") = sCoUsuario
Session("sNomeUsuario") = vRetUsuario(USU_NO_USUARIO_LOGIN,0)
Session("sNomeFuncao") = vRetUsuario(USU_NO_FUNCAO_LOGIN,0)
Session("vRetPerfilGeral") = vRetPerfil
for iLogin = 0 to UBound(vRetPerfil,2)
Session("sPerfilUsuario") = Session("sPerfilUsuario") & vRetPerfil(PRF_CO_PERFIL_LOGIN,iLogin) & "§" & vRetPerfil(PRF_NO_PERFIL_LOGIN,iLogin) & "§§"
next
Response.Redirect("frmPaginaPrincipal.asp")
else
%>
<script>
alert(f_Mensagem(13));
location.href = 'frmLogin.asp';
</script>
<%
end if
end if
%>
|
Referência: 10.4
Explicação:
Dentro da página responsável pelo negócio de login, declaro algumas variáveis no início da página ASP. (Referência 10.5).
|
Dim oSeguranca
Dim vRetUsuarioPerfil
Dim vRetUsuario
Dim vRetPerfil
Dim iLogin
Dim sCoUsuario
Dim sCoSenha
|
Referência: 10.6
Elas serão usadas no decorrer do código.
Começam com uma letra pequena e em seguida maiúsculo, isso porque fiz um padrão para melhor entendimento. Segue os detalhes. (Referência 10.7)
|
o = é um objeto criado, ou seja, do tipo object. |
|
v = é um array ou do tipo variant usado no VB 6.0 |
|
i = é do tipo inteiro |
|
s = é do tipo string. |
Referência: 10.7
O próximo passo foi declarar algumas constantes usadas especialmente para esta página, ou seja, é melhor usar constante do que números no decorrer da página e código. Lembre-se que as constantes declaradas são referentes ao select no banco de dados, ou seja, a posição dos campos no select criado. Por exemplo: Select campo1, campo2 from tabela. O campo1 será a constante com o valor 0, o campo2 com o valor 1 e assim por diante. (Referência 10.8)
|
Const USU_NO_USUARIO_LOGIN = 0
Const USU_NO_FUNCAO_LOGIN = 1
Const PRF_CO_PERFIL_LOGIN = 0
Const PRF_NO_PERFIL_LOGIN = 1
|
Referência: 10.8
Procuro sempre colocar as constantes com letras maiúsculas.
A linha seguinte atribui os valores enviados para as variáveis. (Referência 10.9)
|
sCoUsuario = Request("txtUsuario")
sCoSenha = Request("txtSenha")
|
Referência: 10.9
Explicação:
Atribui a variável sCoUsuario o valor enviado do request, o campo da página anterior chama “txtUsuario”. Fiz da mesma forma para a variável sCoSenha, o request, o campo da página chama “txtSenha”.
Acessando e chamando functions diretamente do VB. (Referência 10.10)
|
set oSeguranca = Server.CreateObject("CPESeguranca.clsSeguranca")
vRetUsuarioPerfil = oSeguranca.ValidarUsuario(sCoUsuario, sCoSenha)
|
Referência: 10.10
Explicação:
Antes que pense “que” código é esse. Lembre-se que em passos anteriores criei uma dll utilizando o VB 6.0 chamado “CPESeguranca” com a classe chamada “clsSeguranca”. A classe possui alguns métodos para logar no sistema utilizando stored procedure no banco de dados. Agora no ASP 3.0, irei chamá-la passando os parâmetros esperados.
A variável “oSeguranca” é setada com o comando “set”, atribuo o valor “Server.CreateObject(“CPESeguranca.clsSeguranca")” que serve para instanciar a dll registrada junto ao COM PLUS. Instanciando dessa forma, os métodos dessa classe estarão disponíveis a serem chamados.
A segunda linha, o retorno do método atribui para a variável “vRetUsuarioPerfil”. Chamo da seguinte maneira, “oSeguranca.ValidarUsuario(sCoUsuario, sCoSenha)”, ou seja, o nome da variável anterior, ponto o nome do método passando as variáveis atribuídas anteriormente com o valor do request enviado pela página anterior. Espero ter entendido essa parte, caso contrário acompanhe os passos com paciência e dedicação. A regra de negócio para validação do usuário está todo dentro do VB, com esse método é verificado se o usuário está habilitado para entrar no sistema ou não. Caso seja habilitado, voltará um array com as informações necessárias de perfil e usuário, caso contrário não voltará nada.
Verificando dados para atribuir session junto ao sistema. (Referência 10.11)
|
if IsArray(vRetUsuarioPerfil) then
vRetUsuario = vRetUsuarioPerfil(0)
vRetPerfil = vRetUsuarioPerfil(1)
end if
Session("sPerfilUsuario") = ""
if IsArray(vRetUsuario) then
if IsArray(vRetPerfil) then
session("sCodigoUsuario") = sCoUsuario
Session("sNomeUsuario") = vRetUsuario(USU_NO_USUARIO_LOGIN,0)
Session("sNomeFuncao") = vRetUsuario(USU_NO_FUNCAO_LOGIN,0)
Session("vRetPerfilGeral") = vRetPerfil
for iLogin = 0 to UBound(vRetPerfil,2)
Session("sPerfilUsuario") = Session("sPerfilUsuario") & vRetPerfil(PRF_CO_PERFIL_LOGIN,iLogin) & "§" & vRetPerfil(PRF_NO_PERFIL_LOGIN,iLogin) & "§§"
next
Response.Redirect("frmPaginaPrincipal.asp")
else
%>
<script>
alert(f_Mensagem(13));
location.href = 'frmLogin.asp';
</script>
<%
end if
end if
%> |
Referência: 10.11
Bom antes de qualquer coisa, o comando que verifica se possui algum array no ASP é IsArray. As primeiras 4 linhas de código verifico se o retorno é array para atribuir os valores a outras variáveis declaradas acima. (Referência 10.12)
|
if IsArray(vRetUsuarioPerfil) then
vRetUsuario = vRetUsuarioPerfil(0)
vRetPerfil = vRetUsuarioPerfil(1)
end if
|
Referência: 10.12
Em seguida zero a session usada em todo sistema, isto é, atribuo o valor igual a nada (“”). Referência 10.13
|
Session("sPerfilUsuario") = ""
|
Referência: 10.13
Todo esse código de verificação de usuário junto ao sistema dll registrado com COM PLUS serve para segurança de código. Até o momento, validamos o usuário que está tentando logar, porém ainda não foram atribuídas as sessões que serão usadas. Todo o controle será em cima de sessões atribuídas automaticamente com dados vindos do componente VB.
|
if IsArray(vRetUsuario) then
if IsArray(vRetPerfil) then
session("sCodigoUsuario") = sCoUsuario
Session("sNomeUsuario") = vRetUsuario(USU_NO_USUARIO_LOGIN,0)
Session("sNomeFuncao") = vRetUsuario(USU_NO_FUNCAO_LOGIN,0)
Session("vRetPerfilGeral") = vRetPerfil
for iLogin = 0 to UBound(vRetPerfil,2)
Session("sPerfilUsuario") = Session("sPerfilUsuario") & vRetPerfil(PRF_CO_PERFIL_LOGIN,iLogin) & "§" & vRetPerfil(PRF_NO_PERFIL_LOGIN,iLogin) & "§§"
next
Response.Redirect("frmPaginaPrincipal.asp")
else
%>
<script>
alert(“Usuário sem perfil cadastrado.”);
location.href = 'frmLogin.asp';
</script>
<%
end if
else
%>
<script>
alert(“Usuário ou senha inválido.”);
location.href = 'frmLogin.asp';
</script>
<%
end if
|
Referência: 10.14
Explicação (Referência 10.14)
A primeira condição que faço é se a variável “vRetUsuario” é um array, ou seja, se os dados que estão atribuídos a ele, é do tipo array. Se não for do tipo array, cai na condição “else” do código. Com isso é mostrado um alerta com a mensagem: “usuário ou senha inválido” e retorna para a tela “frmLogin.asp”.
Se for do tipo array, faço uma outra condição que verifica se a variável “vRetPerfil”, isso porque o sistema também possui no banco de dados o perfil do usuário que está sendo logado. Caso usuário que estiver logando não tiver perfil cadastro no banco de dados, será enviada a mensagem: “Usuário sem perfil cadastrado.” e redirecionará para a página de login (“frmLogin.asp”). Sendo um array, atribuo todas as sessões usadas no sistema aos valores retornados do componente da seguinte forma. (Referência 10.15).
|
session("sCodigoUsuario") = sCoUsuario
Session("sNomeUsuario") = vRetUsuario(USU_NO_USUARIO_LOGIN,0)
Session("sNomeFuncao") = vRetUsuario(USU_NO_FUNCAO_LOGIN,0)
Session("vRetPerfilGeral") = vRetPerfil
|
Referência: 10.15
Note que alguns valores que atribuo para a session, é uma constante declarada no início do código da página. Depois de atribuir as sessions necessárias, redireciono para a página principal com o comando “response.redirect”. (Referência 10.16)
|
Response.Redirect("frmPaginaPrincipal.asp")
|
Referência: 10.16
Ilustração de todo código mostrado anteriormente.
Tela de login do sistema. (Referência 10.17)
Referência: 10.17
Digito usuário e senha. (Referência 10.18)

Referência: 10.18
Cliquei no botão logar e entrei no sistema. (Referência 10.19)

Referência: 10.19
Caso digite usuário ou senha inválida, é mostrada uma mensagem no brownser. (Referência 10.20)
Referência: 10.20
Bom, fico por aqui com mais um artigo. Espero ter ajudado a todos os leitores. Qualquer dúvida, favor entrar em contato pelo e-mail: mauricio@aspneti.com
Livros publicados:
Mauricio Junior
www.aspneti.com
www.ascompras.com