Você está na página 1de 6

Visual FoxPro - Continuando

com o FoxWeb
Informática
Universidade Paulista (UniP)
5 pag.

Document shared on www.docsity.com


iMasters - Por uma Internet mais criativa e dinâmica Página 1

Nilton Paulino Quarta-feira, 07 de abril de 2004

Continuando com o FoxWeb


Em continuação à coluna anteirior sobre FoxWeb, esta coluna traz algumas técnicas que somadas às já apresentadas na edição passada, poderão facilitar em muito a vida do
desenvolvedor.

No coluna anterior conhecemos os seguintes métodos do FoxWeb:

Request.Form()
Request.Item()
Response.Write()

Utilizando apenas estes três métodos, e é claro, aquela coleção de comandos do VFP que já estamos acostumados a utilizar no nosso dia-a-dia, conseguimos construir um
aplicativo web que fosse capaz de Inserir, Editar, Apagar e Consultar dados em uma tabela. Como todos sabemos, isso é o básico que qualquer aplicativo deveria fazer.
Entretanto, há muitas outras coisas que precisam ser realizadas num aplicativo Web, assim como em aplicativos Desktop. Exemplo disso pode ser um controle de acesso a
determinadas rotinas ou páginas.

Nesta coluna, meu objetivo é mostrar como utilizar Variáveis de Sessão e Variáveis de Servidor para fazer controle de acesso às páginas contruidas em FoxWeb e também
para coletar informações sobre o usuário que navega sobre a página e ainda para manter algumas informações na memória (como uma variável pública) por um determinado
tempo.

Antes de continuarmos, precisamos entender duas coisas:

1) Variáveis de Sessão: São uma coleção de variáveis que o Servidor Web armazena independentemente para cada usuário que utiliza o aplicativo web (site).

2) Variáveis de Servidor: São variáveis que o Servdor Web mantém e disponibiliza para usarmos em nossos aplicativos. Essas variáveis podem conter diversos tipos de
informações como o número IP do usuário remoto, o nome do servidor, o nome de usuário que ele está usando no Windows NT/2000, e várias outras.

Uma vez conhecidos estes dois conceitos, muitas coisas poderemos realizar com tais variáveis.

Na edição anterior, várias vezes utilizamos expressões como a seguinte:

<form name="form1" method="post" action="gravaeditarusuario.fwx?id=<%=tempusu.id_usuario%>">

Se você observar, o sinal "?" (ponto de interrogação) na expressão acima indica que um parâmetro está sendo passado. No caso o parâmetro é ID. Esse tipo de programação
pode nos confundir um pouco ou ainda tornar nossa tarefa de depuração de aplicativo mais cansativa, uma vez que algumas variáveis comportam-se de forma um tanto
esquisofrênicas quando mescladas ao HTML. Isso se deve pela forma como são interpretadas pelo servidor.

Para acabar de vez com problemas dessa natureza, aplicamos as Variáveis de Sessão. Criar, Remover e Ler variáveis de sessão são tarefas bastante simples quando estamos
trabalhando com o FoxWeb.

Conheçamos agora alguns dos métodos e propriedades utilizados para manipular variáveis de sessão:

Propriedades:

LastHit: Indica a data e hora da última requisição feita pelo usuário. Somente para leitura.

TimeOut: Define o tempo em minutos que uma sessão de usuário expira por inatividade. Pode ser alterada em tempo de execução.

Métodos:

Abandon: Instrui ao FoxWeb para destruir a sessão de usuário e remover todas as variáveis de sessão a ela relacionadas.

GetSessioID: Retorna o ID da sessão. Uma sequência única de caracteres que identifica a sessão do usuário.

GetVar: Retorna o valor de uma variável de sessão gravada previamente.

Remove: Instrui ao FoxWeb para remover uma determinada variável de sessão.

SetVar: Armazena uma variável de sessão para uso imediato ou superior, enquanto a sessão não expirar por inatividade (timeout), não ocorrer a destruição da sessão
(Abandon) ou a variável não for removida (Remove).

Neste artigo usaremos ainda mais um método do objeto Request que será:

ServerVariables: Retorna o conteúdo de uma variável de Servidor, enviada pelo navegador (browser), ou provida pelo Servidor Web.

Algumas das variáveis de servidor:

HTTP_USER_AGENT: retorna uma string descrevendo o navegador (browser) que está sendo usado.

http://imasters.uol.com.br/artigo/1943/visual_foxpro/continuando_com_o_foxweb/imprimir/ 9/28/2010 8:45:22 AM


Document shared on www.docsity.com
iMasters - Por uma Internet mais criativa e dinâmica Página 2

HTTP_COOKIE: Retorna a string Cookie usada na requisição.

HTTP_REFERER: Retorna uma string contendo o URL da página que solicitou a chamada do Script. Este é muito útil principalmente quando gostaríamos de saber de
onde é que estão vindo os usuários de nosso web site.

LOCAL_ADDR: Retorna o IP do servidor ao qual a requisição foi feita. Em ambientes onde existem vários servidores para servir um mesmo site (quando há grande
movimento), este recurso é muito útil para análises estatísticas pra se saber qual servidor está processando as informações.

LOGON_USER: Nome do usuário logado no Windows.

REMOTE_ADDR: Endereço IP do servidor remoto em caso de servidores PROXY/GATEWAY ou da própria máquina do usuário, quando da conexão direta por um
provedor de acesso ou rede.

O número de variáveis de servidor que se pode usar é muito grande e portanto não temos necessidade de descrever todas elas nesta coluna. O importante é você saber que o
FoxWeb consegue mapear todas as variáveis de servidor, mas nem todas podem ser utilizadas em seus scripts. Para saber quais variáveis você pode usar, você deve consultar
a documentação do Servidor Web (IIS, Apache, NetScape, etc.), bem como a versão do seu navegador e também o tipo de requisições que está configurado no servidor (CGI
ou ISAPI).

As variáveis apresentadas acima funcionam perfeitamente com internet Explorer 4 ou superior e no IIS 4 ou superior.

Agora que você já conhece mais algumas das propriedades, métodos e variáveis de servidor, poderemos começar a colocar em prática baseado no exemplo que utilizamos na
edição passada.

Antes de começarmos a codificar, é importantíssimo sabermos o que precisamos fazer. Entendamos então de forma bem simples como funciona nosso aplicativo.

Na coluna anterior construímos um aplicativo que era capaz de cadastrar, consultar, editar e excluir usuários. O grande problema desse aplicativo é que ele não oferece
nenhum controle de acesso às páginas. Ou seja, qualquer pessoa tendo o endereço poderá entrar em qualquer uma das rotinas a partir de qualquer ponto.

Vamos implementar ao código do artigo passado novas características de segurança. As regras a serem implementadas são as seguintes:

1) Um usuário só poderá acessar as rotinas de Alteração ou Exclusão se estiver logado.

2) Um usuário só poderá alterar ou excluir a si mesmo.

3) Quando o usuário tentar acessar uma página e não estiver logado, o mesmo deverá ser redirecionado para a página de Login.

4) A página de Login após validar o usuário deverá redirecioná-lo novamente para a página de resultado da busca.

5) As tarefas de Alteração e Exclusão devem ser registradas numa tabela de LOG.

Como você pôde notar, vamos trabalhar exclusivamente em cima do que já temos, fazendo apenas algumas alterações e criando uma tabela de LOG.

Para conseguirmos identificar se o usuário está ou não logado, será necessário utilizarmos variáveis de sessão. Como já vimos anteriormente, podemos utilizar três métodos
para criar, ler e apagar variáveis de sessão:

Session.SetVar()
Session.GetVar()
Session.Remove()

Definiremos uma variável chamada ID_USUARIO, para identificar o usuário nas sessões. O conteúdo desta variável será o e-mail do usuário. Quando ela estiver vazia, é
porque o usuário não logou no sistema ou a sessão pode ter expirado por tempo de inatividade.

O Código que usaremos para checar se o usuário está logado será o seguinte:

Se inserirmos este código exatamente antes de qualquer código nos nossos scripts, sempre que ID_USUARIO não existir, ou estiver vazio, será redirecionado para a página
loga_usuario.fwx.

As páginas nas quais temos que adicionar o código acima são:

editarusuario.fwx
excluiusuario.fwx
gravaeditarusuario.fwx

Veja abaixo como ficou o código da página editarusuario.fwx:

http://imasters.uol.com.br/artigo/1943/visual_foxpro/continuando_com_o_foxweb/imprimir/ 9/28/2010 8:45:22 AM


Document shared on www.docsity.com
iMasters - Por uma Internet mais criativa e dinâmica Página 3

Consequentemente é exatamente isso que iremos fazer nas outras duas páginas.

Ainda nesta página de edição de usuário, precisamos checar se o usuário pode alterar o registro, ou seja, se o registro que ele está querendo alterar é o seu próprio registro.
Caso não seja, devemos lhe negar acesso. O código será o seguinte:

Veja no código abaixo o local exato onde o teste acima deve ser inserido:

Na página gravaeditarusuario.fwx temos que acrescentar o seguinte código no início do Script, para registrarmos a ação no arquivo de LOG:

Na página excluiusuario.fwx o código será basicamente o mesmo, sendo alterado apenas a ação de "EDITOU USUÁRIO" para "EXCLUIU USUÁRIO". :) Veja:

http://imasters.uol.com.br/artigo/1943/visual_foxpro/continuando_com_o_foxweb/imprimir/ 9/28/2010 8:45:22 AM


Document shared on www.docsity.com
iMasters - Por uma Internet mais criativa e dinâmica Página 4

Veja que até o momento, só utilizamos dois métodos novos, daqueles que apresentei no início deste texto. Na verdade é impressionante como se consegue fazer tanta coisa
com tão poucos comandos, quando estamos utilizando o VFP como plataforma de desenvolvimento. Acho que é por isso que os VBZeiros ficam tão chateados e ficam
profetizando a morte do VFP... mas a rapoza tem vindo cada vez mais poderosa! :)

Finalmente nos resta constuir o formulário de LOGIN de nosso aplicativo. Tudo muito simples. Será um camo ID (email) e um campo senha.

As propriedade ACTION desse form referencia a ele próprio, passando uma parâmetro. Assim o mesmo é capaz de validar a ele mesmo. Veja:

Agora passemos a examinar o código do script de validação do formulário:

http://imasters.uol.com.br/artigo/1943/visual_foxpro/continuando_com_o_foxweb/imprimir/ 9/28/2010 8:45:22 AM


Document shared on www.docsity.com
iMasters - Por uma Internet mais criativa e dinâmica Página 5

Tudo que há de diferete daquilo que já estamos acostumados é a chamada ao método Session.SetVar(). Neste caso, o que este método está realizando é a definição da
variável de sessão, ID_USUARIO.

Conclusão:

Nesta coluna, minha intenção foi mostrar mais alguns recursos e facilidades do FoxWeb. Com bastante facilidade implementamos uma das rotinas de segurança mais usadas
em sites da internet. É claro que não é nada sofisticado, mas dá-se a idéia geral do ponto de partida para algo mais complexo.

Espero que esta coluna somado à anterior possam ser de grande valia para você.

Um novo fórum de discussão foi criado para tratar assuntos referentes a FoxWeb. Caso você tenha interesse em se cadastrar, o endereço é http://www.foxbrasil.com.br/
forum/

Para visualizar o resultado da codificação empregada neste artigo, acesse:

http://foxweb.foxtotal.com.br/colunas/parte2/

Click Aqui para fazer download do código fonte.

Meus sinceros agradecimentos a você, que com paciência chegou até ao final desta coluna.

Até a próxima coluna!

Grande abraço.

http://imasters.uol.com.br/artigo/1943/visual_foxpro/continuando_com_o_foxweb/imprimir/ 9/28/2010 8:45:22 AM


Document shared on www.docsity.com

Você também pode gostar