Clipper On Line • Ver Tópico - DICA: Controle de sessão am ASP
Página 1 de 1

DICA: Controle de sessão am ASP

MensagemEnviado: 22 Jul 2013 17:36
por rochinha
Amiguinhos,

Vendo os questionamentos relativos ao controle de usuários em páginas WEB e sabendo que existem tópicos aqui que abordam o tema mas usando .PHP, resolvi postar a dica usando .ASP.

O processo de controle consiste em ver se o usuário já está logado ou não por meio do objeto session do ASP.
<% if Session("logado") = "nao" then
      response.redirect("NaoLogado.asp")
   end if %>
<html>
    ...
</html>


No trecho acima a variável logado poderá conter o valor nao ou qualquer outra coisa, mas só estou avaliando o nao.

Se a respostar for nao o fluxo de operação será direcionado para a página NaoLogado.asp. Caso a resposta seja diferente, continua a operação abrindo alguma página de informações ao usuário.

No trecho a seguir, o script em ASP critica se o usuário está cadastrado em uma tabela de acesso e permite ou não que fique logado no sistema.

<HTML lang="PT" dir="LTR">
<HEAD>
   <TITLE>Contato</TITLE>
   <META http-equiv="content-type" content="text/html; charset=windows-1251">
</HEAD>
<BODY>
<%
    Response.Buffer = True
    pos    = instrrev(lcase(request.servervariables("path_translated")),lcase(scriptrelativefolder)& "\" & lcase(formaction))
    db_dir = left(request.servervariables("path_translated"), pos-1 )
    db     = db_dir &".\"
    set cnn= server.createobject("adodb.connection")
    cnn.open "Driver={Microsoft dBase Driver (*.dbf)};;DBQ="& db &";"
    set acessos=cnn.execute("select * from acessos where liberado = 'S'" )
    Session("logado")="nao"
    do while not acessos.eof
       vnome          = acessos("nome")
       vsenha         = acessos("senha")
       vnivel         = acessos("nivel")
       vpaginainicial = acessos("pagina")
       vliberado      = acessos("liberado")
       If Request.form("UserEmail") = (vnome) then
          If Request.form("UserPass") = (vsenha) then
             response.clear
             Session("usuario")=(vnome)
             Session("logado")="sim"
             If not IsEmpty(vpaginainicial) then
                response.redirect(vpaginainicial)
             end if
          end if
       end if
       acessos.movenext
    loop
    Session("logado")="nao"
    response.redirect("join_erro.asp")
%>
</BODY>
</HTML>


Explicando um pouco como acontece a critica:

Pega o caminho real de onde estaria a tabela a ser manuseada montando o caminho:
    pos    = instrrev(lcase(request.servervariables("path_translated")),lcase(scriptrelativefolder)& "\" & lcase(formaction))
    db_dir = left(request.servervariables("path_translated"), pos-1 )
    db     = db_dir &".\"


Cria uma conexão e abre yma tabela padrão dBase:
    set cnn= server.createobject("adodb.connection")
    cnn.open "Driver={Microsoft dBase Driver (*.dbf)};;DBQ="& db &";"


Executa uma filtragem trazendo somente usuário que tenham o campo liberado como "S":
    set acessos=cnn.execute("select * from acessos where liberado = 'S'" )


Seta inicialmente a variável logado como "nao"
    Session("logado")="nao"
    'response.cookies("autenticacao")("anome") = ""
    'response.cookies("autenticacao")("asenha") = ""
    'response.cookies("autenticacao")("liberado") = " "


Pesquisa na filtragem pelos dados passados:
    do while not acessos.eof
       vnome          = acessos("nome")
       vsenha         = acessos("senha")
       vnivel         = acessos("nivel")
       vpaginainicial = acessos("pagina")
       vliberado      = acessos("liberado")
       If Request.form("UserEmail") = (vnome) then
          If Request.form("UserPass") = (vsenha) then


Carrega nas variáveis vnome, vsenha, etc os dados oriundos dos campos nome, senha, etc:
       vnome          = acessos("nome")
       vsenha         = acessos("senha")
       vnivel         = acessos("nivel")
       vpaginainicial = acessos("pagina")


A tabela acessos.dbf tem os campos nome(Char,30), senha(Char,10), nivel(Num,1), pagina(Char,100), liberado(Char,1).

Caso o usuário seja encontrado na filtragem, a variável logado será setado com sim e o usuário será redirecionado para a sua página pessoal.

O formulário de login do usuário precisa de dois campos apenas, o de nome(type text) e o de senha(type password). O Formulário deve ser do tipo POST.

Os ids de cada campo são UserEmail e UserPass, respectivamente.

Quando digo:
Request.form("UserEmail")


Estou requisitando do formulário os campos UserEmail e UserPass.

Então mãos a obra.