Página 1 de 1

DICA: Controle de sessão am ASP

Enviado: 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.

Código: Selecionar todos

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

Código: Selecionar todos

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

Código: Selecionar todos

    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:

Código: Selecionar todos

    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":

Código: Selecionar todos

    set acessos=cnn.execute("select * from acessos where liberado = 'S'" )
Seta inicialmente a variável logado como "nao"

Código: Selecionar todos

    Session("logado")="nao"
    'response.cookies("autenticacao")("anome") = ""
    'response.cookies("autenticacao")("asenha") = ""
    'response.cookies("autenticacao")("liberado") = " "
Pesquisa na filtragem pelos dados passados:

Código: Selecionar todos

    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:

Código: Selecionar todos

       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.