Ir para conteúdo
Fórum Script Brasil
  • 0

Tópico Especial - Application/session


cyberalexxx

Pergunta

Conforme foi constatado em nossa pesquisa ficou claro o interesse dos membros do forum em saber mais sobre global.asa (application/session), sendo assim estamos criando este tópico para debatermos o assunto.

Vou Iniciar com um tutorial sobre o assunto:

TUTORIAL APPLICATION/SESSION

APPLICATION

Ao conjunto de páginas ASP de um mesmo diretório virtual damos o nome de Aplicação ASP. Tal aplicação será iniciada na primeira vez que um usuário tentar acessar alguma página desse diretório virtual. Será finalizada quando o servidor web for desligado.

O objeto Application existe para nos possibilitar o armazenamento e recuperação de valores relacionadas a uma aplicação ASP. Com ele podemos criar variáveis de qualquer subtipo cujo valor pode ser acessado ou modificado por qualquer usuário conectado ao diretório virtual.

Para criar uma variável do nível de aplicação, devemos escrever comandos com seguinte sitaxe:

Application("NOME_DA_VARIAVEL") = VALOR_DA_VARIAVEL

Uma vez criada, tal variável estará acessível a qualquer usuário da aplicação. Seu valor ficará armazenado até que o servidor web seja desligado.

Como o conteúdo desse tipo de variável pode ser modificado por qualquer usuário conectado à aplicação, poderia haver alguma confusão se vários usuários tentassem alterar esse valor ao mesmo tempo. Para evitar possíveis problemas com a “concorrência", o objeto application disponibiliza dois métodos: LOCK e UNLOCK.

O primeiro bloqueia as variáveis de nível de aplicação para o usuário que invoca tal método. Se qualquer outro “usuário” tentar acessar variáveis desse nível, ficará esperando até a aplicação ser desbloqueada.

A aplicação só será desbloqueada quando o script que a bloqueou termina sua execução, ou quando ocorre o “TimeOut”, ou quando o script invoca o método UNLOCK.

Ainda relacionado a esse objeto existem dois eventos:

Application_OnStart Ocorre quando a aplicação é iniciada, ou seja, quando um diretório virtual é acessado pela primeira vez.

Application_OnEnd Ocorre quando a aplicação é finalizada, ou seja, quando o web server é desligado.

Um evento é uma subrotina automaticamente chamada quando o sistema sofre alguma ação especifica. Tais subrotinas não são escritas diretamente nas páginas ASP mas num arquivo a parte nomeado de GLOBAL.ASA.

Sendo assim, quando um diretório virtual for acessado pela primeira vez, o Servidor Web procura em tal diretório a existência desse arquivo. Se encontra, abre o arquivo e procura a subrotina Application_OnStart para executar seus comandos. A mesma coisa acontece quando desligamos o servidor web, só que ele chama a subrotina Application_OnEnd.

No exemplo a seguir criamos uma variável de nível de aplicação chamada DataHoraI para armazenar a Data/Hora em que a aplicação foi iniciada. Outra variável chamada Titulo para armazenar o titulo da aplicação ASP. E uma variável chamada Correio que armazena o e-mail do Web Master:

Exemplo : Global.asa

<script LANGUAGE=VBSCRIPT RUNAT=SERVER>

Sub Application_OnStart()
    Application("DataHoraI")=Now
   Application("Titulo")="Curso de ASP"
   Application("Correio")="mailto:lineus@seduc.pi.gov.br"
End Sub

</SCRIPT>
Exemplo : Application1.asp
<% @LANGUAGE=VBSCRIPT %>
<HTML><HEAD><TITLE><%=Application("Titulo")%></TITLE></HEAD>
<BODY>
Essa aplicação ASP foi iniciada em <B><%=Application("DataHoraI")%></B><BR>
<A Href="<%=Application("Correio")%>">Web Master</a>
</BODY>
</HTML>
Obs : Só poderá existir um arquivo Global.asa em cada diretório virtual Observe que o trabalho de manutenção do site pode ficar facilitado. Imagine que todas as páginas asp do seu diretório virtual possuem um padrão de cores, links, cabeçalho, etc. Sendo assim, as páginas teriam muito código em comum. Se desejarmos modificar os padrões do nosso site, teríamos que fazer alterações em todos os arquivos do diretório virtual. Mas se utilizarmos variáveis de nível de aplicação para armazenar essas configurações, não necessitamos mudar todos os arquivos do diretório, mas só o arquivo GLOBAL.ASA. Exemplo : Global.asa
<script LANGUAGE=VBSCRIPT RUNAT=SERVER>

Sub Application_OnStart()
   Application("DataHoraI")=Now
   Application("Titulo")="I Curso de ASP da UFPI"
   Application("Correio")=mailto:lineulima@yahoo.com
   Application("CorFundo")="Black"
   Application("CorTexto")="Yellow"
   Application("TamFonte")="4"
End Sub

</SCRIPT>
Exemplo : Application2.asp
<% @LANGUAGE=VBSCRIPT %>
<HTML><HEAD><TITLE>
<%=Application("Titulo")%>
</TITLE></HEAD>
<BASEFONT SIZE=<%=Application("TamFonte")%> COLOR=<%=Application("CorTexto")%>>
<BODY BGCOLOR=<%=Application("CorFundo")%>>
Essa aplicação ASP foi iniciada em <B><%=Application("DataHoraI")%></B><BR>
<A Href="<%=Application("Correio")%>">Web Master</a>
</BODY>
</HTML>
SESSION Toda vez que um usuário Web se conecta a um aplicativo ASP é iniciada uma sessão para o mesmo no servidor Web. Para representar tal sessão, o ASP possui um objeto interno chamado Session. Na verdade, ele é muito parecido com o objeto Application. A diferença esta em dizer que esse objeto pode armazenar valores ligados apenas a um único visitante do site(o dono da sessão). Com ele podemos criar variáveis de qualquer subtipo cujo valor pode ser acessado ou modificado somente pelo “dono” da sessão. Para criar uma variável do nível de sessão, devemos escrever comandos com seguinte sitaxe: Session(“NOME_DA_VARIAVEL”) = VALOR_DA_VARIAVEL As variáveis de sessão permanecerão na memória(ativas) até a sessão ser encerrada. Isso pode acontecer quando o usuário fechar o web browser, quando ocorre o “TIMEOUT” da sessão, ou quando o script invoca o método ABANDON do objeto Session. A propriedade TIMEOUT é usada quando o usuário fica parado sem fazer nada no Browser. O default é vinte minutos, mas esse valor pode ser modificado da seguinte forma: Session.Timeout = VALOR_MINUTOS Ainda relacionado a esse objeto existem dois eventos: Session_OnStart Ocorre quando a sessão é iniciada Session_OnEnd Ocorre quando a sessão é finalizada. A exemplo dos eventos do objeto Application, eles também devem ser escritos como subrotinas de um arquivo GLOBAL.ASA. O exemplo ilustra o conceito de sessão. Temos uma variável a nível de aplicação chamada contador. Ela serve para informar a quantidade de pessoas que acessaram essa aplicação ASP. A idéia é incrementar o valor dessa variável toda vez que uma sessão é iniciada. Também utilizamos uma variável de sessão que informa a hora em que a sessão em questão foi aberta. Exemplo : Global.asa
<script LANGUAGE=VBSCRIPT RUNAT=SERVER>

Sub Application_OnStart()
   Application("DataHoraI")=Now
   Application("Titulo")="I Curso de ASP da UFPI"
   Application("Correio")=mailto:lineulima@yahoo.com
   Application("CorFundo")="Black"
   Application("CorTexto")="Yellow"
   Application("TamFonte")="4"
   Application("Contador")=0
End Sub

Sub Session_OnStart()
      Application("Contador")=Application("Contador")+1  
     Session("HoraS")=Time
End Sub

</SCRIPT>
A página a seguir encerra a sessão através do método ABANDON: Exemplo sessao1.asp
<% @LANGUAGE=VBSCRIPT %>
<HTML><HEAD><TITLE>
</TITLE></HEAD>
Essa sessão foi iniciada às <%=Session("HoraS")%><BR>
Você é o visitante de número <%=Session("Contador")%><BR>
Desde <%=Application("DataHoraI")%>
<HR>
<A HREF="sessao2.asp">Encerrar Sessão</A>
</BODY>
</HTML>

FONTE: Curso de ASP da UFPI escrito por LINEU ANTONIO DE LIMA SANTOS

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

Contador e Usuários On-line com Global.asa

<script language=vbscript runat=server>

SUB Application_OnStart
Session.Timeout=3

Application.Lock

Application("users_on") = 0
Application("contador") = 0

Application.UnLock

END SUB
SUB Application_OnEnd
END SUB

SUB Session_OnStart


Application.Lock
Application("users_on") = Application("users_on") + 1
Application("contador") = Application("contador") + 1
Application.UnLock
END SUB

SUB Session_OnEnd

Application.Lock
Application("users_on")=Application("users_on") - 1
Application.UnLock

END SUB
</script>
Agora para mostrar os Usuários On-line
<%=Application("users_on")%>
E para mostrar o contador
<%=Application("contador")%>

Como disse não é muito recomendavel utilizar o global.asa porque muitos servidor não o aceitam e alem disso, se o servidor for desligado, reiniciado ou formato, você perde todos os dados do global.asa, a melhor forma ainda é o bom e velho banco de dados =)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Link para o comentário
Compartilhar em outros sites

  • 0
o global.asa pode ter dados vindos do banco de dados... tipo colocar um rs dentro dele..????

pode sim, olha aki um exemplo que sorteia um registro e guarda o valor em uma session:

global.asa

<script LANGUAGE=VBSCRIPT RUNAT=SERVER>
Sub Session_OnStart()
   SET conexao=Server.CreateObject("adodb.connection")
   conexao.Open "Driver={mySQL}; Server=localhost; Port=3306; Option=0; Socket=; Stmt=; Database=dados; Uid=xxxx; Pwd=xxxxxx;"
   SQL = "select frase from textos order by rand() limit 0,1"
   SET RS = Server.CreateObject("ADODB.Recordset")
   RS.Open SQL,conexao,3
   session("frasesorteada") = Rs("frase")
end sub
</script>

Link para o comentário
Compartilhar em outros sites

  • 0
o global.asa pode ter dados vindos do banco de dados... tipo colocar um rs dentro dele..????

pode sim, olha aki um exemplo que sorteia um registro e guarda o valor em uma session:

global.asa

<script LANGUAGE=VBSCRIPT RUNAT=SERVER>
Sub Session_OnStart()
   SET conexao=Server.CreateObject("adodb.connection")
   conexao.Open "Driver={mySQL}; Server=localhost; Port=3306; Option=0; Socket=; Stmt=; Database=dados; Uid=xxxx; Pwd=xxxxxx;"
   SQL = "select frase from textos order by rand() limit 0,1"
   SET RS = Server.CreateObject("ADODB.Recordset")
   RS.Open SQL,conexao,3
   session("frasesorteada") = Rs("frase")
end sub
</script>

Interessante, nunca tinha me passado pela cabeça se podia ou não....

legal isso, bom saber =)

Link para o comentário
Compartilhar em outros sites

  • 0

usei a busca aqui... e achei alguns modos que podem ser usados no access:

ComandoSQL = "SELECT COUNT(id) AS total FROM eventos"

Set bd = Conexao.Execute(ComandoSQL)

randomize() 

numero = Int(bd("total") *Rnd) + 1

ComandoSQL = "SELECT top "&numero&"  * FROM tabela"

Set bd = Conexao.Execute(ComandoSQL)

bd.Move numero - 1

Response.Write bd("campo")
ou
sql="select top XX from tabela  ORDER by rnd(id)"

esse ultimo não testei...

Link para o comentário
Compartilhar em outros sites

  • 0

Vou tirar o Destaque deste Tópico.

Agora, eu criei uma lista de tópicos pendurados da seção.

Assim, fica facil a visualização dos Tópicos Importantes!

Abraços, e podem continuar a discussão!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Luís Antonio de Marchi

Ola!

Estou começando a mexer com o GLOBAL.ASA e tenho uma duvida que não vi em nenhum tutorial.... tem como eu abrir um if dentro do arquivo?

ex:

sub session_OnStart

if not date = appication("data") then

session("ligado") = "sim"

end if

......

end sub

*Favor se puderem me enviar um email sobre essa duvida...

luis@luisdemarchi.com

Link para o comentário
Compartilhar em outros sites

  • 0
Ola!

Estou começando a mexer com o GLOBAL.ASA e tenho uma duvida que não vi em nenhum tutorial.... tem como eu abrir um if dentro do arquivo?

ex:

sub session_OnStart

if not date = appication("data") then

session("ligado") = "sim"

end if

......

end sub

*Favor se puderem me enviar um email sobre essa duvida...

luis@luisdemarchi.com

Voce tentou fazer isso?? não deu certo?? deu algum erro??

Pois eu não vejo nenhum problema em colocar ifs em seu global.asa

sub session_OnStart

if not date = application("data") then

session("ligado") = "sim"

end if

......

end sub

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Luís Antonio de Marchi

HIHIhiHHI esse errinho ai foi so na hora de digitar o meu exemplo aqui!...

Não! eu nem chegei a fazer meu global.asa porque não pretendo usar ele no meu site e sim em outro site que to criando...! Tive essa curiosidade porque não vi ninguém falando sobre isso....

Mais uma duvida... eu mexo com asp no meu horario de folga e uso o PWS.. tem como usar o global.asa no meu servidor local?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Lisakmy

HIHIhiHHI esse errinho ai foi so na hora de digitar o meu exemplo aqui!...

Não! eu nem chegei a fazer meu global.asa porque não pretendo usar ele no meu site e sim em outro site que to criando...! Tive essa curiosidade porque não vi ninguém falando sobre isso....

Mais uma duvida... eu mexo com asp no meu horario de folga e uso o PWS.. tem como usar o global.asa no meu servidor local?

Preciso de um help...

Criei um formulário que envia dados de um cliente para outra página...preciso inserir uma session. Pois qd algum campo do form não não preenchido há um link p/ retornar...

Onde eu crio a session?

Link para o comentário
Compartilhar em outros sites

  • 0

Estou tentando recuperar a session num site, mas essa session foi iniciada em outro site meu que está num domínio, tipo assim:

Session do site 1:

<%

Session("id") = id

%>

Recuperar Session no site 2:

<%

id = Session("id")

%>

Testei aqui e não funcionou, alguém sabe dizer porque? Tem alguma solução? Preciso que seja feito via Session, pois trabalho num setor da minha empresa que não tem acesso direto para alterações no sistema que está em outro domínio. Para não ficar enchendo o saco do desenvolvimento, preciso pegar esse valor sem que eles tenha que mudar nada no código deles.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...