ASP - Gerenciando as informações e o ambiente


O gerenciamento das informações enviadas e recebidas entre as páginas ASP é uma tarefa muito importante e precisa ser entendida muito bem para ser usada de forma a não afetar o desempenho da aplicação nem sobrecarregar o servidor.
 
Vamos abordar as principais formas de como enviar e receber informações e a melhor forma de fazer este importante serviço. Comecemos com os formulários.
 
Formulários
 
Os formulários são talvez a mais importante forma de receber e enviar informações quer entre as páginas ASP quer para o servidor ou o cliente.
 
Basicamente existem duas maneiras de usarmos os formulário para receber/enviar informações: os métodos GET e POST. .
 
Usando o método GET
 
Quando um usuário informa os dados nos campos de um formulário e o submete, os dados contidos em cada campo do formulário são transferidos para o servidor. Se o formulário estiver usando o método GET, os dados são anexados à URL como uma string de argumento.
 
Quanto maior a quantidade de campos e quanto mais longas forem as strings de texto informadas , maior será o tamanho da URL e mais complexo será o seu processamento. Sem mencionar que existe um limite – mais ou menos 2500 caracteres - para o número de caracteres que podemos anexar a uma URL. Vamos mostrar o uso deste procedimento na listagem a seguir:
<% Language="VBScript" %>
<%
Response.Expires=0
Dim cnome, nidade
if Request.ServerVariables("QUERY_STRING") <> "" then
cnome = Request.QueryString("nome")
nidade = Request.QueryString("idade")
%>
<html>
<body bgcolor="aqua">
Os dados recebidos foram :<BR><BR>
Nome : <%= cnome %> <BR>
Idade : <%= nidade %> <BR>
<p>
O caminho do script atual é : <BR>
<%= Request.ServerVariables("SCRIPT_NAME") %>
<P>
O método da solicitação usado foi o método: <BR>
<%= Request.ServerVariables("REQUEST_METHOD") %>
<P>
A URL recebida como argumento foi: <BR>
<%= Request.ServerVariables("QUERY_STRING") %>
</body>
</html>
<%
Else
%>
<html>
<body bgcolor="white">
<form action="<%= Request.ServerVariables("SCRIPT_NAME") %>" METHOD="GET">
Informe o seu nome : <br>
<input type="Text" Name="nome"> <BR>
Informe a sua idade : <BR>
<input type="Text" Name="idade"> <BR>
<input type="Submit" Name="submeter" Value="Enviar">
</form>
</body>
</html>
<% End If %>
O resultado do processamento é o seguinte:
Formulário obtido quando se executa o script pela primeira vez
Após preencher o formulário e clicar no botão Enviar obtemos a seguinte tela:

Analisando o script temos:

1-) Ao ser executado pela primeira vez o script verifica se existe uma string de consulta, isto é feito através da instrução - Request.ServerVariables("QUERY_STRING") <> "" . Como no início a string de consulta é vazia ( ="" ) o processamento passa a exibir o formulário para coleta de dados.
 
2-) O código que exibe o formulário é o seguinte:
<form action="<%= Request.ServerVariables("SCRIPT_NAME") %>" METHOD="GET">
Informe o seu nome : <br>
<input type="Text" Name="nome"> <BR>
Informe a sua idade : <BR>
<input type="Text" Name="idade"> <BR>
<input type="Submit" Name="submeter" Value="Enviar">
</form>
Onde em <form action="<%= Request.ServerVariables("SCRIPT_NAME") %>" METHOD="GET">
o atributo action determina a URL ao qual o conteúdo dos campos do formulário é submetido ( o caminho virtual do script atual) e o atributo METHOD indica qual comando HTTP foi usado – no caso GET.
3-) Os campos para entrada de dados são definidos em :
Informe o seu nome : <br>
<input type="Text" Name="nome"> <BR>
Informe a sua idade : <BR>
<input type="Text" Name="idade"> <BR>
Onde : <input type="Text" Name="nome"> e <input type="Text" Name="idade">
Definem o tipo (Type) de caixa de texto e o nome de identificação do campo(Name) .
 
4-) O elemento <input type="Submit" Name="submeter" Value="Enviar">
define o botão de submissão. Ao clicar no botão o formulário é enviado e o script é executado novamente pois referenciamos o seu URL no atributo action do formulário.
 
5-) Agora a sentença Request.ServerVariables("QUERY_STRING") <> "" será verdadeira e o processamento executara:
cnome = Request.QueryString("nome")
nidade = Request.QueryString("idade")
Onde os valores dos campos nome e idade definidos no formulário serão extraídos e atribuidos ás variáveis cnome e nidade definidos no inicio do script.
Observe que usamos a propriedade Querystring do objeto Request porque os dados foram submetidos via método GET.
 
6-) No final os dados recebidos são exibidos no scritp a seguir:
Os dados recebidos foram :<BR><BR>
Nome : <%= cnome %> <BR>
Idade : <%= nidade %> <BR>
<p>
O caminho do script atual é : <BR>
<%= Request.ServerVariables("SCRIPT_NAME") %>
<P>
O método da solicitação usado foi o método: <BR>
<%= Request.ServerVariables("REQUEST_METHOD") %>
<P>
A URL recebida como argumento foi: <BR>

<%= Request.ServerVariables("QUERY_STRING") %>

Utilizamos a notação <%= %> para exibir o conteúdo das variáveis mas poderíamos Ter usando response.write("") .

Note que utilizamos os elementos:SCRIPT_NAME ,REQUEST_METHOD E QUERY_STRING da coleção ServerVariables do objeto Request para obter informações do servidor.

Usando o método Post

Quando o formulário utilizar o método POST os dados são enviados no corpo da solicitação HTTP e não são adicionados á URL tornando mais fácil o processamento da solicitação e melhorando o desempenho do servidor.
Em geral deve-se usar POST quando os formulários forem alterar algo no ambiente da aplicação e GET para realizar pesquisas.
 
O mesmo código anterior usando método POST ficaria assim:
<% Language="VBScript" %>
<%
Response.Expires=0
 
Dim cnome, nidade
 
if Request.ServerVariables("CONTENT_LENGTH") <> 0 then
cnome = Request.form("nome")
nidade = Request.form("idade")
%>
<html>
<body bgcolor="aqua">
Os dados recebidos foram :<BR><BR>
Nome : <%= cnome %> <BR>
Idade : <%= nidade %> <BR>
<p>
O caminho do script atual é : <BR>
<%= Request.ServerVariables("SCRIPT_NAME") %>
<P>
O método da solicitação usado foi o método: <BR>
<%= Request.ServerVariables("REQUEST_METHOD") %>
<P>
A URL recebida como argumento foi: <BR>
<%= Request.ServerVariables("CONTENT_TYPE") %>
</body>
</html>
<%
Else
%>
<html>
<body bgcolor="white">
<form action="<%= Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
Informe o seu nome : <br>
<input type="Text" Name="nome"> <BR>
Informe a sua idade : <BR>
<input type="Text" Name="idade"> <BR>
<input type="Submit" Name="submeter" Value="Enviar">
</form>
</body>
</html>
<% End If %>

O processamento do script resultará na seguinte tela:

As alterações básicas foram as seguintes:
 
1-) Request.ServerVariables("CONTENT_LENGTH") <> 0 é usado para verificar se o conteúdo da variável de ambiente CONTENT_LENGTH tem um valor diferente de zero. Na primeira vez que o script for executado o valor será igual a zero.
 
2-) <form action="<%= Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
define o método usado . Agora o método POST
 
3-) Para extrair o conteúdo dos campos definidos no formulário com o método GET , usamos Request.QueryString , com o método POST usamos Request.Form:
Cnome = Request.form("nome")
nidade = Request.form("idade")
4-) Para exibir a URL recebida usamos a variável de ambiente CONTENT_TYPE
A URL recebida como argumento foi: <BR>
<%= Request.ServerVariables("CONTENT_TYPE") %>
Valor exibido para o método POST será sempre: applicaton/x-www-urlencoded
 
Usando Cookies para armazenar informações
 
Os cookies podem ser usados para armazenar informações do usuário ao preencher um formulário . Como os cookies permanentes conservam o estado mesmo após o fechamento do navegador temos com isso uma forma de recuperar informações armazenadas anteriormente a respeito do usuário. Vejamos um exemplo onde o usuário preenche três formulários e no final todos os dados serão recuperados e exibidos em uma página.
 
A aplicação consiste em quatro arquivos: cookie.asp , cookie1.asp , cookie2.asp e cookie3.asp.
O código do script inicial - cookie.asp – é o seguinte:
<%response.buffer=true%>
<html>
<head>
<TITLE>cookie.asp</TITLE>
</head>
<body bgcolor="#FFFFFF">
<%
nome=request.cookies("prefs")("nome")
idade=request.cookies("prefs")("idade")
%>
<form action="cookie1.asp" method="post">
Qual o seu nome: <br>
<input type="text" name="nome" size="20" value="<%=nome%>"><br>
Qual a sua idade<br>
&nbsp;
<input type="text" name="idade" size="20" value="<%=idade%>">
<p>
<input type="submit" value="Continua ->"></p>
</form>
<%
For Each cookie in Response.Cookies
Response.Cookies(cookie).Expires = now()+30
Next
%>
</body>
</html>
No script cookies.asp temos:
 
1-) A primeira linha do script é <%response.buffer=true%> , se omitirmos esta linha teremos uma mensagem de erro durante a execução do script abaixo quando formos gravar a data de expiração para cada cookie da coleção :
<%
For Each cookie in Response.Cookies
Response.Cookies(cookie).Expires = now()+30
Next
%>

Erro exibido sem usar Response.Buffer=True : "Os cabeçalhos HTTP já estão gravados no navegador cliente. Quaisquer modificações no cabeçalho HTTP devem ser feitas antes de gravar o conteúdo da página."

2-) As linhas de script a seguir tentam recuperar os valores para os cookies("prefs")
<%
nome=request.cookies("prefs")("nome")
idade=request.cookies("prefs")("idade")
%>
Como na primeira vez que o script é executado os cookies não foram ainda criados e os campos nome e idade não possuem valores ainda, as variáveis nome e idade receberão valores vazios.
 
3-) As linhas de scripts a seguir definem as caixas de texto usadas e os nomes dos campos utilizados; o valor inicial é definido como sendo a variavel nome e a variável idade.
<input type="text" name="nome" size="20" value="<%=nome%>"><br>
<input type="text" name="idade" size="20" value="<%=idade%>">
 
A tela exibida pela execução do script pela primeira vez , é a seguinte:

4-) Quando o usuário preencher o formulário e clicar em continuar , o arquivo de script cookie1.asp será processado. Vejamos o seu código a seguir:

<%response.buffer=true%>
<html>
<head>
<TITLE>cookies1.asp</TITLE>
</head>
<body bgcolor="#FFFFFF">
<%
nome=request("nome")
idade=request("idade")
telefone=request.cookies("prefs")("telefone")
endereco=request.cookies("prefs")("endereco")
%>
<form action="cookies2.asp" method="post">
Informe o seu telefone<br>
<input type="text" name="telefone" size="20" value="<%=telefone%>"><br>
Informe o seu endereço<br>
<input type="text" name="endereco" size="20" value="<%=endereco%>"><br>
<p>
<%
response.cookies("prefs")("nome")=nome
response.cookies("prefs")("idade")=idade
For Each cookie in Response.Cookies
Response.Cookies(cookie).Expires = now()+30
Next
%>
<input type="submit" value="Continua ->"></p>
</form>
</body>
</html>

Ao ser processado o arquivo de script cookie1.asp , faz seguinte:

1-) Armazena nas variáveis (Request) nome e idade o conteudo dos campos nome e idade informados no arquivo formulário apresentado pelo arquivo cookie.asp , e a seguir recupera os valores para os cookies("prefs") referente ao telefone e endereço; inicialmente esses valores serão vazios.
 
nome=request("nome")
idade=request("idade")
telefone=request.cookies("prefs")("telefone")
endereco=request.cookies("prefs")("endereco")
 
2-) Apresenta o formulário definindo as caixas de texto e os campos telefone e endereco. Os valores iniciais (Value) são definidos para exibir o conteudo das variáveis telefone e endereço . (Observe que usamos o método POST)
 
%>
<form action="cookies2.asp" method="post">
Informe o seu telefone<br>
<input type="text" name="telefone" size="20" value="<%=telefone%>"><br>
Informe o seu endereço<br>
<input type="text" name="endereco" size="20" value="<%=endereco%>"><br>
<p>
<%
 
3-) Por último atribuímos uma data de expiração aos cookies como sendo de 30 dias a partir de hoje (now).
 
<%
response.cookies("prefs")("nome")=nome
response.cookies("prefs")("idade")=idade
For Each cookie in Response.Cookies
Response.Cookies(cookie).Expires = now()+30
Next
%>
 
O processamento deste script – cookie1.asp - irá gerar a seguinte tela:
Após preencher o formulário e clicar no botão Continua , o arquivo de script cookies2.asp será processado , e, da mesma forma irá armazenar o conteúdo dos campos em cookies("prefs") , o código do script cookies2.asp é o seguinte:
<%response.buffer=true%>
<html>
<head>
<TITLE>cookies2.asp</TITLE>
</head>
<body bgcolor="aqua">
<%
telefone=request("telefone")
endereco=request("endereco")
Profissao=request.cookies("prefs")("Profissao")
passatempo=request.cookies("prefs")("passatempo")
salario=request.cookies("prefs")("salario")
%>
<form action="cookies3.asp" method="post">
Profissao<br>
<input type="text" name="profissao" size="20" value="<%=profissao%>"><br>
Passatempo<br>
<input type="text" name="passatempo" size="20" value="<%=passatempo%>"><br>
Salário<br>
<input type="text" name="salario" size="20" value="<%=salario%>">
<br>
<%
response.cookies("prefs")("telefone")=telefone
response.cookies("prefs")("endereco")=endereco
For Each cookie in Response.Cookies
Response.Cookies(cookie).Expires = now()+30
Next
%>
<input type="submit" value=" Encerrar -> ">
</form>
</body>
</html>
O seu processamento gerará o seguinte formulário:

Quando o usuário preencher este último formulário e clicar em encerrar o arquivo de script cookies3.asp será processado e irá recuperar os valores armazenados nos cookies exibindo-os na página. O código para cookies3.asp é:

<%response.buffer=true%>
<html><head>
<TITLE>cookies3.asp</TITLE>
</head>
<body bgcolor="aqua">
<%
nome=request.cookies("prefs")("nome")
idade=request.cookies("prefs")("idade")
telefone=request.cookies("prefs")("telefone")
endereco=request.cookies("prefs")("endereco")
profissao=request("profissao")
passatempo=request("passatempo")
salario=request("salario")
%>
------------------------------------------------<br>
Ola <%=nome%><p>
Obrigado por fornecer os seus dados pessoais<p>
O seu endereco é: <%=endereco%><br>
------------------------------------------------<br>
Seu telefone para contato é : <%=telefone%><br>
Profissão : <%=profissao%><br>
Seu passatempo predileto é : <%=passatempo%><br>
------------------------------------------------<br>
Idade : <%=idade%><br>
Salario : <%=salario%><br>
------------------------------------------------<br>
<%
response.cookies("prefs")("profissao")=profissao
response.cookies("prefs")("passatempo")=passatempo
response.cookies("prefs")("salario")=salario
For Each cookie in Response.Cookies
Response.Cookies(cookie).Expires = now()+30
Next
%>
</body>
</html>

Assim :

1-) Os valores dos cookies são recuperados em:
 
nome=request.cookies("prefs")("nome")
idade=request.cookies("prefs")("idade")
telefone=request.cookies("prefs")("telefone")
endereco=request.cookies("prefs")("endereco")

2-) Para exibir os valores dos campos usamos a notação <%= > , mas poderiamos Ter usando response.write

A tela final , exibindo os valores informados é a seguinte:
Usando o objeto Session para passar informações
 
As variáveis de sessão são uma forma simples de passar informações entre as páginas ASP . Elas são iguais a variáveis globais , enquanto você estiver navegando pelas páginas as variáveis serão visíveis e você não vai precisar passá-las de uma página para outra.
 
Veremos um exemplo usando variáveis de sessão para armazenar informações. O exemplo aproveita o código do exemplo anterior com algumas variações. No exemplo temos 3 arquivos : session1.asp , session2.asp e session3.asp.
 
O formulário gerado por session1.asp ao ser executado pela primeira vez e após o seu preenchimento é exibido como a seguir:
Session1.asp exibido pela primeira vez
Formulário gerado session1.asp preenchido
O código de session1.asp é o seguinte:
<%response.buffer=true%>
<html>
<head>
<TITLE>session1.asp</TITLE>
</head>
<body bgcolor="aqua">
<%
session("nome")=request("nome")
session("idade")=request("idade")
%>
<form action="session2.asp" method="post">
Qual o seu nome: <br>
<input type="text" name="nome" size="20" value="<%=session("nome")%>"><br>
Qual a sua idade<br>
&nbsp;
<input type="text" name="idade" size="20" value="<%=session("idade")%>">
<p>
<input type="submit" value="Continua ->"></p>
</form>
</body>
</html>
A única novidade é o uso das variáveis de sessão para armazenar os valores informados no formulário:
 
session("nome")=request("nome")
session("idade")=request("idade")
 
Quando o botão Continua é clicado , o arquivo session2.asp é chamado e o formulário mostrado abaixo surge na tela:
Formulário gerado por session2.asp já preenchido
Aqui esta o código de session2.asp:
<%response.buffer=true%>
<html>
<head>
<TITLE>session2.asp</TITLE>
</head>
<body bgcolor="aqua">
<%
session("nome")=request("nome")
session("idade")=request("idade")
session("telefone")=request("telefone")
session("endereco")=request("endereco")
%>
<form action="session3.asp" method="post">
Informe o seu telefone<br>
<input type="text" name="telefone" size="20" value="<%=session("telefone")%>"><br>
Informe o seu endereço<br>
<input type="text" name="endereco" size="20" value="<%=session("endereco")%>"><br>
<p>
<input type="submit" value="Continua ->"></p>
</form>
</body>
</html>
Aqui, ainda , a única novidade são as variáveis de sessão usadas para armazenar os dados:
 
session("nome")=request("nome")
session("idade")=request("idade")
session("telefone")=request("telefone")
session("endereco")=request("endereco")
 
Finalmente , o arquivo session3.asp exibe todas as informações , como a seguir:
 
Vejamos o seu código:
<%response.buffer=true%>
<html>
<%response.buffer=true%>
<html><head>
<TITLE>session3.asp</TITLE>
</head>
<body bgcolor="aqua">
<%
session("endereco")=request("endereco")
session("telefone")=request("telefone")
%>
------------------------------------------------<br>
<b>
Ola <%=session("nome")%><p>
Obrigado por fornecer os seus dados pessoais<p>
O seu endereco é: <%=session("endereco")%><br>
------------------------------------------------<br>
Seu telefone para contato é : <%=session("telefone")%><br>
------------------------------------------------<br>
Idade : <%=session("idade")%><br></b>
------------------------------------------------<br>
</body>
</html>
 

As informações contidas nas variáveis de sessão são exibidas usando a forma:

<%= session("nome_da_variavel")%>

Embora fáceis de usar e permitirem uma personalização do ambiente para cada usuário , tanto os cookies como as variáveis de sessão devem ser usadas com muito equilíbrio e sem exageros pelos seguintes motivos:


Copyright (c) 2004 - José Carlos Macoratti