Artigo

Sistema de Login em ASP – Parte X

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>&nbsp;<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();"> &nbsp;

                                                                           <input type="button" value="Alterar" name="btnAlterar" onclick="s_AlterarSenha();"> &nbsp;

                                                                           <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

 

  • Mauricio Junior

    Mauricio Junior