Ao usar ASP para escrever comunidades virtuais, compras online e outros programas, os objetos Aplicativo e Sessão desempenham um papel decisivo e podem ser usados de forma flexível e racional.
Este objetivo é a chave para melhorar a qualidade do programa. Deixe-me dar uma introdução detalhada a esses dois objetos integrados do ASP com base na minha experiência nesta área.
1. Visão geral dos membros do objeto Aplicativo
Os membros do objeto Aplicativo incluem coleções, métodos e eventos de objetos Aplicativo.
⒈Uma coleção de objetos Aplicativo
Coleção de conteúdo: Uma coleção de todas as variáveis armazenadas no objeto Applicaiton que não são definidas usando o elemento <OBJECT>.
StaticObjects: Uma coleção de todas as variáveis armazenadas no objeto Aplicativo definido usando o elemento <OBJECT>
Exemplo: existe a seguinte atribuição em default.asp
aplicação(a)=a
aplicação(b)=128
aplicação(c)=falso
Depois, há a coleção de conteúdos
application.contents(1)=a 'também pode ser escrito como application.contents(a)=a
application.contents(2)=128 'também pode ser escrito como application.contents(b)=128
application.contents(3)=false 'também pode ser escrito como application.contents(c)=false
O autor aqui recomenda usar um método como application.contents(a) ao chamar, porque é mais intuitivo se for representado por um número de série.
Considere a ordem de atribuição.
⒉Métodos do objeto Aplicativo
Contents.Remove (nome da variável): Exclua a variável especificada da coleção Application.Contents
Contents.RemoveAll(): Exclua todas as variáveis da coleção Application.Contents
Lock(): Bloqueia o objeto Application para que apenas a página ASP atual possa acessar o conteúdo.
Unlock(): desbloqueia o objeto Aplicativo
Exemplo: Em default.asp:
aplicação(a)=a
aplicação(b)=128
aplicação(c)=falso
resposta.write application.contents(1)&<br>
resposta.write application.contents(2)&<br>
resposta.write application.contents(3)&<br>
resposta.write após remoção b:
aplicação.contents.remove(b)
resposta.write application.contents(1)&<br>
resposta.write application.contents(2)&<br>
Resultado da execução:
um
128
Falso
Depois de remover b:
um
Falso
Se você deseja excluir todas as variáveis da coleção, basta usar application.contents.removeall. Quanto aos métodos Lock e Unlock, eles são frequentemente usados na prática.
O leitor também está familiarizado com isso, então não será um fardo aqui.
⒊Evento de objeto de aplicativo
OnStart: Ocorre quando o primeiro usuário que acessa o servidor acessa uma página pela primeira vez
OnEnd: Ocorre quando a última sessão do usuário terminou e todos os códigos do evento OnEnd da sessão foram executados, ou quando o último usuário acessou
O servidor ocorre após um período de tempo (geralmente 20 minutos) quando ninguém acessa o servidor.
Se você deseja definir o que fazer nos eventos OnStart e OnEnd do objeto aplicação, você precisa escrever o código no arquivo Global.asa (exemplos abaixo), e
E coloque o arquivo no diretório raiz do site (geralmente Inetpubwwwroot)
2. Visão geral dos membros do objeto Session
Os membros do objeto Session possuem um atributo a mais que o objeto Application, a saber: coleções, propriedades, métodos e eventos.
⒈Coleção de objetos de sessão
Conteúdo: Uma coleção de todas as variáveis armazenadas em um objeto Session específico que não são definidas usando o elemento <OBJECT>.
StaticObject: Uma coleção de todas as variáveis definidas usando o elemento <OBJECT> e armazenadas no objeto Session.
Exemplo: existe a seguinte atribuição em default.asp
sessão(a)=a
sessão(b)=128
sessão(c)=falso
Depois, há a coleção de conteúdos
session.contents(1)=a 'também pode ser escrito como session.contents(a)=a
session.contents(2)=128 'também pode ser escrito como session.contents(b)=128
session.contents(3)=false 'também pode ser escrito como session.contents(c)=false
⒉Propriedades do objeto Session
CodePage: legível/gravável. Tipo inteiro. Define a página de código usada para exibir o conteúdo da página no navegador. Uma página de código é o conjunto de caracteres de valores numéricos que diferentes idiomas usam
Diferentes páginas de código. Por exemplo, a página de código ANSI é 1252, a página de código japonês é 932 e a página de código chinês simplificado é 936.
LCID: Legível/Gravável. Tipo inteiro. Define o identificador de localidade da página enviado ao navegador. LCID é uma abreviatura padrão internacional que identifica exclusivamente uma região, por ex.
2057 define o símbolo monetário da região atual como £.
ID da sessão: somente leitura. Tipo longo. Retorna o identificador de sessão desta sessão. Cada vez que uma sessão é criada, um identificador é atribuído automaticamente pelo servidor. pode ser baseado nisso
O valor determina qual dos dois usuários acessa o servidor primeiro.
Tempo limite: legível/gravável. Tipo inteiro. Define um limite de tempo limite em minutos para a sessão. Se o usuário não atualizar ou solicitar nenhum dentro desse período
página web, a sessão gerada pelo usuário será encerrada automaticamente. O valor padrão é 20.
Os atributos acima são de pouca utilidade em aplicativos reais e basicamente não precisam ser modificados.
⒊Métodos do objeto Session
Contents.Remove(nome da variável): Remove a variável especificada da coleção Session.contents
Contents.Removeall(): Remove todas as variáveis da coleção Session.contents
Abandon(): encerra a sessão do usuário atual e destrói o objeto Session atual.
Os métodos Contents.Remove (nome da variável) e Contents.Removeall() do objeto Session são basicamente iguais aos do objeto Application.
Para ajudar a entender, você pode consultar o exemplo acima para alterar Aplicativo para Sessão. O que quero explicar aqui é Contents.Removeall() e Abandon()
A diferença é que a execução desses dois métodos liberará o atual
Todas as variáveis Session da sessão do usuário. A diferença é que Contents.Removeall() simplesmente libera o valor da variável Session sem encerrar a sessão atual.
Além de liberar a variável Session, Abandon() também encerrará a sessão e acionará o evento Session_OnEnd. Espero que todos prestem atenção na diferença entre os dois.
⒋Eventos do objeto Session
OnStart: Disparado quando uma sessão de usuário ASP é gerada. Este evento é gerado quando algum usuário solicita qualquer página deste servidor.
OnEnd: Disparado quando a sessão do usuário ASP termina. Este evento também será disparado quando o método Abandon() ou timeout for utilizado.
Esses dois eventos são iguais aos eventos OnStart e OnEnd do Application e devem ser colocados no arquivo Global.asa.
Vamos nos concentrar em estudar o uso desses quatro eventos com você.
3. Global.asa
Os objetos Aplicativo e Sessão do ASP incorporam um recurso que outros objetos integrados do ASP não possuem - eventos. Cada vez que um visitante acessa o servidor, um
Eventos OnStart (o primeiro visitante acionará os eventos OnStart de Aplicativo e Sessão ao mesmo tempo, mas Aplicativo precede Sessão), cada visitante
Um evento OnEnd será acionado quando cada sessão terminar (os eventos OnEnd do Aplicativo e da Sessão serão acionados quando a última sessão do convidado terminar, mas
A sessão precede a aplicação).
Os dois eventos OnStart e OnEnd são geralmente usados em comunidades virtuais para contar o número de pessoas online, modificar o status online e offline dos usuários, etc. Para definir essas duas coisas especificamente
arquivo, você precisa escrever o código no arquivo Global.asa e colocar o arquivo no diretório raiz do site (o padrão é Inetpubwwwroot). além disso,
Os objetos Aplicativo e Sessão especificam outros objetos internos do ASP (Resposta, Solicitação,
Servidor, Sessão...) não pode ser usado. A seguir está um exemplo de contagem do número de pessoas online em uma comunidade virtual para ilustrar como usar esses dois eventos.
Descrição do arquivo:
global.asa está localizado no diretório d:Inetpubwwwroot
default.asp está localizado no diretório d:Inetpubwwwroot, a página de login da comunidade virtual
login.asp está localizado no diretório d:Inetpubwwwroot e é usado para detectar o nome de usuário e a senha inseridos pelo usuário.
index.asp está localizado no diretório d:Inetpubwwwroot, a página inicial da comunidade virtual
bbs.mdb está localizado no diretório d:Inetpubwwwroot e é um banco de dados que armazena informações do usuário.
Estrutura do banco de dados (ACCESS):
===tabela bbs===
id ID do usuário, inteiro longo
nome nome de usuário, tipo de texto
senha de código, tipo de texto
on-line status on-line, sim/não
===global.asa===
<script LANGUAGE=VBScript RUNAT=Servidor>
Subaplicativo_OnStart
inscrição (on-line) = 0
Finalizar sub
subApplication_OnEnd
segundo 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
</roteiro>
==============
===login.asp===
...'Verificação de senha, conecte-se ao banco de dados e verifique se o nome de usuário e a senha inseridos pelo usuário estão corretos.
se a verificação da senha for aprovada, então
sessão(nome)=rs(nome)
sessão(id)=rs(id)
sessão(passar)=verdadeiro
outro
rs.fechar
conexão.fechar
A senha de response.write está errada!
resposta.fim
terminar se
aplicativo.lock
inscrição(on-line) = inscrição(on-line)+1
conn.Execute (update bbs set online=1 where id=&session(id))'Define o status do usuário como online
aplicativo.unlock
rs.fechar
conexão.fechar
response.redirect index.asp 'Depois de inicializar os dados, vá para a página inicial da comunidade
===========
Neste exemplo, utilize a variável application (online) para registrar o número de pessoas online que efetuaram login na comunidade, pois uma vez que um usuário acessa o servidor, não importa se o usuário está conectado ou não.
Ao efetuar login, o evento OnStart será gerado, portanto você não pode aumentar o Applicaiton (online) em um no evento OnStart. Porque independentemente de ser uma sessão de usuário logado
O evento OnEnd será gerado quando ele terminar (se um visitante visitar o servidor mas não fizer login na comunidade, o evento OnEnd também será gerado após o término de sua sessão), então em
Uma instrução if é usada no evento Session_OnEnd para determinar se é um evento OnEnd para um usuário conectado. Nesse caso, o número de pessoas online será reduzido em uma.
Este é apenas um exemplo simples de contagem do número de pessoas online. Para uma comunidade virtual completa, não basta apenas contar quantas pessoas estão online.
Há um campo online no banco de dados que é usado para registrar o status online do usuário. Quando o usuário efetua login, online é definido como 1 em login.asp, mas não aparece quando o usuário está offline.
Online está definido como 0. Para melhorá-lo, você precisa modificar o evento Session_OnEnd e definir online como 0 neste evento.
===loal. sas===
<script LANGUAGE=VBScript RUNAT=Servidor>
Subaplicativo_OnStart
inscrição (on-line) = 0
definir aplicativo (conn) = Server.CreateObject (ADODB.Connection)
application(db)=Server.MapPath( bs.mdb) 'É melhor usar o caminho absoluto bs.mdb aqui, conforme detalhado abaixo
Finalizar sub
subApplication_OnEnd
definir aplicativo (conn) = nada
Finalizar sub
SubSession_OnStart
Finalizar sub
SubSession_OnEnd
if session.contents(pass) then 'Determina se é o Session_OnEnd do usuário logado
application(con).open =driver={Driver do Microsoft Access (*.mdb)};dbq=&application(db)
aplicativo.lock
aplicação(online)=aplicação(online)-1
application(con).Execute (atualizar amigos definidos online=0 onde id=&session.contents(id))
aplicativo.unlock
aplicação(con).fechar
terminar se
Finalizar sub
</roteiro>
==============
Neste ponto, o código completo foi concluído. Como o objeto Servidor não pode ser utilizado no evento OnEnd de Aplicação e Sessão, o objeto do banco de dados
O endereço físico da conexão e do banco de dados no servidor (d:inetpubwwwroot bs.mdb) é armazenado na variável do aplicativo e
Pré-processado no evento Application_OnStart. Da mesma forma, session(pass) não pode ser usado em vez de session.contents no evento Session_OnEnd.
(aprovado) (explicação detalhada abaixo).
4. Dois pontos dignos de atenção nos exemplos deste artigo
⒈session.contents no evento OnEnd
Amigos que acabaram de começar a entrar em contato com global.asa geralmente se referem ao evento Session_OnEnd acima
se session.contents(pass) então escrito como
se sessão(passar) então,
Neste caso, o sistema não apresentará erro, mas o conteúdo a partir daí nunca será executado. Isso ocorre porque o objeto Session está proibido de ser utilizado no evento OnEnd.
Mas variáveis de sessão podem ser chamadas usando uma coleção de objetos Session. Como o IIS não exibiu nenhuma mensagem de erro, o autor já perdeu muito tempo com isso.
entre. Espero que todos possam aprender com isso!
⒉Ao usar Server.MapPath para obter o endereço físico do banco de dados no evento Application_OnStart, você pode usar o endereço absoluto.
Vamos fazer uma experiência: altere o evento Application_OnStart acima
application(db)=Server.MapPath( bs.mdb) foi alterado para:
aplicação(db)=Server.MapPath(bbs.mdb)
Em seguida, crie um subdiretório test no diretório d:inetpubwwwroot e escreva temp.asp no diretório test.
====teste.asp====
<%response.write aplicativo(db)%>
================
Em seguida, copie temp.asp e coloque-o no diretório raiz (d:inetpubwwwroot). Abra global.asa com o bloco de notas e, em seguida, abra dois navegadores, navegador A
Digite o endereço http://localhost/temp.asp e pressione Enter. O seguinte será exibido no navegador:
d:inetpubwwwroot bs.mdb
Em seguida, clique no menu Arquivo na janela do Bloco de Notas e selecione Salvar (para alterar o horário de modificação do global.asa, fazendo com que o IIS reinicie todos os serviços) e clique em
Digite o endereço http://localhost/test/temp.asp no navegador B e pressione Enter. A saída no navegador é:
d:inetpubwwwrootestbs.mdb
Embora o arquivo global.asa seja colocado no diretório raiz do site, se um endereço relativo for usado em server.mappath, Application_OnStart será acionado.
Se a página visitada pela primeira vez pelo usuário do evento não pertencer ao diretório raiz, a obtenção do endereço físico do banco de dados não será o resultado esperado, espero que todos tenham um cuidado especial.