ASP Aula 3: Objeto Aplicativo e Objeto Sessão
Autor:Eve Cole
Data da Última Atualização:2009-05-30 19:58:17
Na aula anterior, aprendemos sobre a coleta de dados Form, a coleta de dados QueryString e a coleta de dados ServerVariables do objeto Request. Antes de continuar com o estudo a seguir, é recomendável que você relaxe primeiro, porque o objeto Aplicativo a ser apresentado a seguir é relativamente abstrato e você pode não ser capaz de distinguir as coisas quando o compreender pela primeira vez. Lembre-se: quando você não consegue encontrá-lo, não pense muito sobre o que é o objeto Aplicativo? Como diz o velho ditado, aprenda a usá-lo primeiro.
1. Compreenda o objeto Aplicativo. Para refrescar sua mente, vejamos uma rotina de contador (você deve executá-la para entendê-la):
Primeiro edite um arquivo wuf16.htm:
<html>
<corpo>
Exemplo de registro do número de cliques em uma página: <a href="wuf17.asp">wuf17.asp</a>
</body>
</html>
O código de wuf17.asp é o seguinte:
<% @LANGUAGE = VBScript%>
<% 'wuf17.asp - Registra o número de visitas a uma determinada página (princípio do contador)
Opção Explícita
Dim CountWeb
CountWeb = Request.ServerVariables("SCRIPT_NAME")
'Isso garante que cada página tenha uma variável única para evitar confusão
%>
<HTML><BODY>
<%
Response.Write CountWeb & "<Br><Br>" & vbcrlf
Application.Lock 'Por favor, leia a explicação
Application(CountWeb) = Application(CountWeb) + 1 'Acumulador, adicione 1 ao número de cliques
Aplicativo.UnLock
Response.Write "O número total de cliques nesta página antes que o servidor WEB seja desligado e reiniciado é:" & Application(CountWeb)
%>
</BODY></HTML>
Ao executar este programa, para a maioria das pessoas, existe apenas uma máquina, que é o servidor Web e o cliente. Então você só pode imaginar uma situação como esta: seus dois arquivos da página inicial são colocados em um servidor Web distante e uma enxurrada de usuários nacionais e estrangeiros os acessa através de navegadores. Assim que cada usuário clicar, o valor de Application(CountWeb) será incrementado em 1 e, enquanto o servidor que armazena o arquivo wuf17.asp não for fechado, Application(CountWeb) continuará a acumular. Mas observe que se o servidor for desligado e reiniciado, o Aplicativo (CountWeb) começará a contar a partir de 0 novamente (estou confuso, disse por que o número de visitas à minha página é sempre de um dígito). Para evitar esse tipo de situação de contagem que sempre começa do zero, deve-se salvar o valor do Aplicativo (CountWeb) antes do desligamento do servidor, e retirá-lo quando necessário na próxima vez, para que possa ser acumulado sequencialmente. para fazer isso, ouça Decompose após N vezes.
A próxima pergunta é o que significa Application.Lock e UnLock? Acabamos de presumir que um grande número de usuários está visitando a página, e cada clique de cada usuário fará com que o Aplicativo (CountWeb) aumente em 1. Pense nisso, isso não seria uma bagunça (O quê! Eu posso'? Se pensar nisso, deve ser você (só você é o único que patrocina a página inicial), então deve haver uma regra de ordem de chegada. Quando um usuário visita a página e precisa modificar o valor do Aplicativo (CountWeb), use o método Lock para bloqueá-lo e evitar que outros usuários o modifiquem. Após a conclusão da modificação, desbloqueie-o.
Você viu no exemplo acima que o objeto Application fornece informações compartilhadas (Application(CountWeb)) para todos os usuários e é orientado a todos os usuários (o acesso de cada usuário fará com que o contador aumente em 1). O objeto Application também possui dois eventos, evento Application_OnStart e evento Application_OnEnd (não se confunda, este é apenas um conceito inicial em linguagens de programação orientadas a objetos. A sintaxe ao usá-lo é a seguinte:
<SCRIPT LANGUAGE=VBScript RUNAT=Servidor>
SubApplication_OnEnd
'Quando o servidor WEB for fechado, o evento Application_OnEnd será ativado
'Ou seja, o programa irá executar o código colocado aqui
'Portanto, antes de o servidor ser desligado, podemos alterar o valor de Application (CountWeb) em wuf17.asp aqui
'Salve-o, como em um arquivo de texto.
Finalizar sub
Subaplicativo_OnStart
'Quando o primeiro usuário navegar na página ASP, o evento Application_OnStart será ativado, mas quando outros usuários navegarem no futuro, este evento não ocorrerá.
'Ou seja, o programa irá executar o código colocado aqui
'Portanto, o valor de Application(CountWeb) salvo no arquivo de texto pode ser lido aqui.
Finalizar sub
</SCRIPT>
A seguir está um exemplo para ilustrar como utilizar eventos. A função deste programa é contar o número total de cliques em todas as páginas do site.
O código do arquivo wuf18.asp (outros arquivos de páginas do site são semelhantes a este arquivo):
<% @LANGUAGE = VBScript%>
<% Opção Explícita
'Todos os arquivos de página do site devem incluir esta frase <!--#include file="wuf19.asp"-->%>
<!--#include file="wuf19.asp"-->
<HTML><BODY>
O número total de acessos em todas as páginas do site antes do servidor ser desligado e reiniciado: <%= Application("CountAll") %>
</BODY></HTML>
Código do arquivo wuf19.asp:
<% 'wuf19.asp
Aplicativo.Lock
Aplicativo("CountAll") = Aplicativo("CountAll") + 1
Aplicativo.UnLock
%>
Os arquivos wuf18.asp e wuf19.asp são colocados no mesmo diretório. Código do arquivo global.asa:
Nota: O manipulador de eventos deve ser salvo como um arquivo de texto denominado "global.asa" e colocado no diretório raiz do caminho virtual (geralmente no mesmo diretório do arquivo index.htm ou default.htm, por exemplo: Tomemos minha máquina como exemplo. Em termos de caminhos absolutos, global.asa é colocado em c:InetPubhome, enquanto wuf18.asp e wuf19.asp são colocados em c:InetPubhomeasp). somente caminho É permitida a existência de um arquivo global.asa.
<SCRIPT LANGUAGE=VBScript RUNAT=Servidor>
'global.asa - wuf18.asp O nome do arquivo no pacote de download é 18global.asa, que precisa ser renomeado ao usá-lo.
Subaplicativo_OnStart
'Quando o primeiro usuário navegar na página da web, defina o valor inicial do contador como 0.
'Quando outros usuários navegarem no futuro, o código a seguir não será mais executado.
Aplicativo.Lock
Aplicativo("ContarTodos") = 0
Aplicativo.UnLock
Finalizar sub
</SCRIPT>
Navegue wuf18.asp para visualizar os resultados da execução. Parece que não é difícil apenas aprender a usar o objeto Application.
2. Compreenda o objeto Session. Com o objeto Application anterior como prenúncio, o objeto Session é muito mais fácil. É semelhante ao objeto Application, exceto que é usado apenas para registrar informações relacionadas a um único usuário. Ele é orientado a um único usuário, portanto podemos usar o objeto Session para armazenar informações sobre um único usuário.
Assim como o objeto Application, o objeto Session também possui dois eventos: evento Session_OnStart e evento Session_OnEnd. A sintaxe de uso é semelhante ao objeto Aplicativo.
Vale ressaltar que antes de utilizar o objeto Session, você deve confirmar se a função Cookie do navegador está habilitada (a configuração padrão é adequada).
Aqui está um exemplo. Os requisitos para o arquivo global.asa são os mesmos acima, portanto, o global.asa no exemplo acima será substituído pelo global.asa neste exemplo.
<SCRIPT LANGUAGE=VBScript RUNAT=Servidor>
' global.asa - wuf20.asp O nome do arquivo no pacote de download é 20global.asa
SubSession_OnStart
Session("In") = Now 'Função Now obtém a hora atual
Finalizar sub
SubSession_OnEnd
Sessão("Saída") = Agora
Aplicativo.Lock
Aplicação("Saída") = Sessão("Saída")
Aplicação("Entrada") = Sessão("Entrada")
Aplicativo (“Fora”).Desbloquear
Finalizar sub
</SCRIPT>
Arquivo wuf20.asp:
<%@Idioma=VBScript%>
<HTML>
<CORPO>
<% 'wuf20.asp
Response.Write "Configurações de tempo limite padrão:" & Session.Timeout & "Minutos<Br>"
Sessão.Timeout = 1
Response.Write "A hora em que você entrou neste site:" & Session("In") & "<Br>"
Response.Write "Atualize esta página em 1 minuto" e "<Br><Br>"
if Not IsEmpty(Application("Out")) então
Response.Write "A última vez que você entrou neste site:" & Application("In") & "<Br>"
Response.Write "A última vez que você saiu deste site:" & Application("Out") & "<Br>"
Response.Write "Tempo de navegação (minutos):" &_
Datediff("n",Application("In"),Application("Out")) & "<Br><Br>"
Terminar se
if IsEmpty(Session("Out")) então
Response.Write "O valor de Session(""Out"") antes da atualização e após a atualização está vazio" & "<Br>"
Terminar se
%>
</BODY>
</HTML>
Quando o usuário navega pela página web pela primeira vez, ocorre o evento Session_OnStart O programa registra o horário em que o usuário entra na página web. Porém, o evento Session_OnEnd não ocorre neste momento, portanto a Aplicação ("Out"). o valor está vazio e o programa não exibe o tempo de navegação.
Sabemos que o tempo de vida do objeto Aplicativo vai desde o primeiro usuário que navega na página da web até o desligamento do servidor. O tempo de vida do objeto Session vai desde a primeira vez que o usuário navega na página da web (o início da sessão) até o final da sessão. Então, quando termina a sessão? Especificamente neste exemplo, Session.Timeout = 1 define o tempo limite da sessão para 1 minuto, ou seja, se nenhuma solicitação for fornecida ao servidor web por 1 minuto, a sessão expira, fazendo com que a sessão termine, ocorre o evento Session_OnEnd, e o programa executa o código em Session_OnEnd. Aqui colocamos os tempos de entrada e saída em Application("In") e Application("Out") respectivamente, pois após o término da sessão o objeto Session não existirá mais.
A partir desta rotina, podemos ver:
1. Os objetos Aplicativo e os objetos Sessão têm tempos de vida diferentes.
2. O objeto Session é para um único usuário e seu valor é armazenado no cliente. A navegação por outros usuários não tem impacto no objeto Session de usuário único. Um único usuário só pode ler e escrever o valor de seu próprio objeto Session (por exemplo: Session("In")).
3. Observe a representação de aspas duplas em Response.Write: (""Out"").
4. Lembrete especial: Este programa não tem praticidade e é apenas para depuração (adequado apenas para navegação por apenas um usuário). A resposta está no final deste artigo.
Dica: Preste atenção às características do objeto Aplicativo.
3. Um exemplo clássico: como exibir o número de pessoas online em uma página da web No exemplo a seguir, Application ("Online") é usado para armazenar o número de pessoas online e Application ("CountAll") é usado para armazenar. armazenar o número total de visitantes.
Princípio: Quando um novo usuário navega na página web, ocorre o evento Session_OnStart, o número de usuários online aumenta em 1 e o número de usuários visitantes também aumenta em 1. Quando um usuário sai, o evento Session_OnEnd ocorre após o tempo limite da sessão e o número de pessoas online é reduzido em 1.
O código Global.asa é o seguinte:
<SCRIPT LANGUAGE=VBScript RUNAT=Servidor>
'Global.asa-wuf21.asp
Subaplicativo_OnStart
Aplicativo.Lock
'Leia o valor inicial de Application("CountAll") aqui
Aplicativo.UnLock
Finalizar sub
SubSession_OnStart
Aplicativo.Lock
Aplicativo("Online") = Aplicativo("Online") + 1
Aplicativo("CountAll") = Aplicativo("CountAll") + 1
Aplicativo.UnLock
Finalizar sub
SubSession_OnEnd
Aplicativo.Lock
Aplicativo("Online") = Aplicativo("Online") - 1
Aplicativo.UnLock
Finalizar sub
SubApplication_OnEnd
Aplicativo.Lock
'Application("CountAll") deve ser salvo no arquivo aqui
Aplicativo.UnLock
Finalizar sub
</SCRIPT>
O código Wuf21.asp é o seguinte:
<%@Idioma=VBScript%>
<HTML>
<CORPO>
<%Session.Timeout = 5%>
<P>Número de pessoas on-line: <%= Application("Online")%></P>
<P>Número total de visitantes: <%= Application("CountAll")%></P>
</BODY>
</HTML>
Observe que esta rotina é comparada com wuf17.asp. Este último conta o número de cliques, enquanto o primeiro conta o número de visitantes.
Resposta: Como o objeto Aplicativo se aplica a todos os usuários, no caso de multiusuários, a navegação dos demais usuários também alterará os valores de Aplicativo (“In”) e Aplicativo (“Out”).