Em primeiro lugar, .asa é o sufixo do arquivo, que é a abreviatura de Active Server Application. O arquivo Global.asa pode gerenciar dois objetos muito exigentes em aplicações ASP: Aplicação e Sessão.
Na verdade, é um arquivo opcional no qual os criadores de programas podem especificar scripts de eventos e declarar objetos com escopo de sessão e aplicativo. O conteúdo deste arquivo não é usado para exibição ao usuário, mas para armazenar informações de eventos e objetos usados globalmente pelo aplicativo. Este arquivo deve ser colocado no diretório raiz da aplicação. Só pode haver um arquivo Global.asa por aplicativo.
O equívoco mais comum sobre o arquivo Global.asa é que ele pode ser usado como uma biblioteca para funções e sub-rotinas comumente usadas. O arquivo Global.asa só pode ser usado para criar referências de objetos e inícios de captura, e para finalizar objetos Aplicativo e objetos Sessão.
O arquivo Global.asa é acessado principalmente com base em eventos no nível da sessão e é chamado nas três situações a seguir:
1. Quando o evento Application_OnStart ou Application_OnEnd é acionado.
2. Quando o evento Session_OnStart ou Session_OnEnd é acionado.
3. Ao referenciar um objeto (Object) instanciado no arquivo Global.asa.
O formato de arquivo padrão do Global.asa é o seguinte:
<SCRIPT LANGUAGE=VBScript RUNAT=Servidor>
Subaplicativo_OnStart
'Application_OnStart É executado quando qualquer cliente visita pela primeira vez a página inicial do aplicativo
Finalizar sub
SubSession_OnStart
'Session_OnStart é executado quando o cliente executa pela primeira vez qualquer página na aplicação ASP
Finalizar sub
SubSession_OnEnd
'Session_OnEnd É executado quando a sessão de um cliente atinge o tempo limite ou sai do aplicativo
Finalizar sub
Subaplicativo_OnEnd
'Application_OnEnd é executado quando o servidor WEB do site é desligado
Finalizar sub
</SCRIPT>
1. Sessão_onStart
Vejamos primeiro um código que controla a entrada dos usuários na página:
1. Global.asa (colocado no diretório raiz do diretório virtual que está sendo depurado)
<SCRIPT LANGUAGE=VBScript RUNAT=Servidor>
Sub Session_OnStart 'Enquanto o usuário fizer login neste site pela primeira vez, ele irá para a página inicial
resposta.redirect (http://www.vevb.com)
Finalizar sub
</SCRIPT>
Em seguida, depure qualquer arquivo no diretório virtual atual e você descobrirá que todas as páginas vão para http://www.vevb.com/<
Através deste exemplo de forçar a entrada em uma determinada página, você pode imaginar que isso é muito necessário quando a página inicial precisa de atenção.
Vamos continuar observando os eventos Session_OnStart e Session_OnEnd usando um exemplo do número de pessoas online.
2. Sessão_onEnd
2. Global.asa (colocado no diretório raiz do diretório virtual que está sendo depurado)
<SCRIPT LANGUAGE=VBScript RUNAT=Servidor>
Sub Application_onStart 'O valor inicial é 0
Aplicativo (OnLine) = 0
Finalizar sub
Sub Session_onStart 'Um usuário acessa a contagem e adiciona 1
Aplicativo.Lock
Aplicativo(OnLine) = Aplicativo(OnLine) + 1
Aplicativo.Desbloquear
Finalizar sub
Sub Session_OnEnd 'No final de um processo do usuário, a contagem é reduzida em 1 (PS se não houver tal programa de evento, o programa de acesso à página será executado.)
Aplicativo.Lock
Aplicativo(OnLine) = Aplicativo(OnLine) - 1
Aplicativo.Desbloquear
Finalizar sub
</SCRIPT>
3.online.asp
<%
se request.querystring(logout)=true então
sessão. Abandonar()
resposta.fim
terminar se
%>
Atualmente existem <%=Application(OnLine)%> on-line
<a href=online.asp?logout=true>Sair</a>
Você descobre que há apenas um Aplicativo (OnLine) nesta página e ele ainda é referenciado explicitamente. Então de onde vem seu valor? Esta é a chave do arquivo Global.asa. Você pode abrir janelas em sequência nesta máquina e realizar a depuração de duas maneiras: fechar a janela ou sair.
3. Continue a refinar
No programa acima, você descobrirá que o efeito de fechar a janela após sair da conexão é diferente daquele de fechar a janela diretamente. Como a Sessão existe há muito tempo, o evento Session_OnEnd não pode ser acionado quando a janela é fechada diretamente, então como concretizar essa ideia quase impossível?
Como todos sabemos, quando uma página web é fechada, ela pode ser associada a um evento onunload. Portanto, desde que onunload possa executar a função de logout da sessão, não é disso que precisamos? Sem mais delongas, vamos modificar online.asp
3.online.asp
<%
se request.querystring(logout)=true então
sessão. Abandonar()
resposta.fim
terminar se
%>
<body onunload=javascript:window.open(exit.asp)>
Atualmente existem <%=Application(OnLine)%> on-line
<a href=online.asp?logout=true>Sair</a>
Observe que quando online.asp executa onunload, exit.asp será aberto. Em seguida, basta definir session.Abandon() em exit.asp e tudo ficará bem.
4.sair.asp
<%session.Abandon()%>
<roteiro>
self.close()
</script>
Obviamente, um script é adicionado para fechar a sessão imediatamente após o logout. Agora, basicamente, um aplicativo web para estatísticas online é suficiente.
4. Estudo aprofundado de Global.asa
A partir da depuração acima, se você tirar conclusões de um exemplo, certamente fará uma pergunta: Como controlar o número de usuários registrados online? Em seguida, observe os seguintes arquivos, um por um:
5. Global.asa (colocado no diretório raiz do diretório virtual que está sendo depurado)
<SCRIPT LANGUAGE=VBScript RUNAT=Servidor>
Subaplicativo_OnStart
inscrição (on-line) = 0
Finalizar sub
SubSession_OnStart
Finalizar sub
SubSession_OnEnd
if session.contents(pass) then 'Determina se é o Session_OnEnd do usuário logado
aplicativo.lock
aplicação(online)=aplicação(online)-1
aplicativo.unlock
terminar se
Finalizar sub
Subaplicativo_OnEnd
Finalizar sub
</SCRIPT>
Observe que o bloco Session_OnStart neste Global.asa não realiza nenhum evento.
Porque assim que um usuário acessar o servidor, independente do usuário estar logado, o evento OnStart será gerado, e o que é necessário agora é que o usuário logado esteja online, então Aplicativo (online) não pode ser aumentado em 1 em o evento OnStart.
E como o evento OnEnd será gerado independentemente de a sessão do usuário logado terminar (se um visitante visitar o servidor mas não efetuar login, o evento OnEnd também será gerado após o término de sua sessão), então uma instrução if é usado no evento Session_OnEnd para julgar se é o evento OnEnd de um usuário logado, em caso afirmativo, o número de pessoas online será reduzido em 1.
E vale ressaltar: o uso de session.contents(pass), pois o uso de objetos Session é proibido no evento OnEnd, mas as variáveis de sessão podem ser chamadas usando uma coleção de objetos Session. Em outras palavras, session(pass) não pode ser escrito diretamente, mas session.contents(pass) precisa ser escrito.
6. login.asp
<%
se request.querystring(logout)=true então
sessão. Abandonar()
terminar se
enviarnome = solicitação.form (enviar)
se enviarnome=enviar então
nome = solicitação.form (nome)
pwd=request.form(pwd)
se nome=cnbruce e pwd=cnrose então
sessão(nome)=nome
sessão(passar)=verdadeiro
outro
Response.write Nome do erro ou senha.<a href='login.asp'>Voltar</a>
resposta.fim
terminar se
aplicativo.lock
inscrição(on-line) = inscrição(on-line)+1
aplicativo.unlock
%>
Atualmente há <%=application(online)%> membros registrados.
<a href=login.asp?logout=true>Sair</a>
<%else%>
<form action=login.asp método=post>
<tipo de entrada=texto nome=nome><br>
<tipo de entrada=nome da senha=pwd><br>
<tipo de entrada=nome de envio=valor de envio=envio>
<%fim se%>
Ele simplesmente detecta que quando o nome de usuário é cnbruce e a senha é cnrose, é gerada uma session(pass)=true, que é julgada em Global.asa.
Cinco, continue a usar sua imaginação
Não basta apenas contar quantas pessoas estão online, mas também determinar o status online do usuário.
Como você pode imaginar, o método básico é que quando o usuário fizer login, defina online como 1 em login.asp (faça upload se houver um banco de dados), mas quando o usuário estiver offline, defina online como 0. Para melhorá-lo, você precisa modificar o evento Session_OnEnd Definir online como 0 neste evento (o valor 0 também será carregado)...