hjemmesider webdesign frontpage gratis grafik scripts javascripts asp html css tutorial begynder hjemmeside  homepage programmering artikler tools
Gå til forsiden   Tips & Tricks, søgemaskiner, optimering, webhoteller, layout, design og meget mere Gratis grafik - knapper, gif, billeder, ikoner m.m. FrontPage - alle kan lave hjemmesider Læs interessante artikler om web og Internet? Prøv vores Online Tools ... vi genererer dine koder Scripts inddelt i kategorier
Tutorials om webprogrammering
Få svar på spørgsmål om web og programmering
hjemmesider
Tips & Tricks, søgemaskiner, optimering, webhoteller, layout, design, webdesign, asp, scripts, smarte funktioner Tips & Tricks, søgemaskiner, optimering, webhoteller, layout, design, webdesign, asp, scripts, smarte funktioner
 

hjemmesider webdesign frontpage grafik scripts asp html css tutorial begynder hjemmeside  homepage programmering

Global.asa

I denne artikel fortæller Henrik Busschou om brug af global.asa filen.

Du kan bl.a. lære, hvordan du med brug af global.asa kan tælle antal online brugere, eller hvordan du kan sikre, at besøgende altid starter på forsiden. Du kan også bruge global.asa til at lave en global conn streng, så du ikke behøver at bekymre dig om din databaseforbindelse mere end ét sted. 

ARTIKEL


Af Henrik Busschou
August 2005
Send e-mail

 

Introduktion

Som tiden går har jeg stødt på mange brugere, som ikke ved, hvad global.asa er for noget. Derfor vil jeg med denne artikel gerne beskrive, hvad global.asa er for en fil, og hvad den kan bruges til.
Finder du undervejs en fejl/mangel eller måske en udvidelse, jeg mangler at beskrive, så send endelig en mail.

Inden du går i gang, bør du være opmærksom på følgende:

1) Jeg har ladet mig fortælle. at en del gratis udbydere ikke understøtter brugen af global.asa. Dette har jeg dog ikke testet. Vær blot opmærksom på det, hvis du står og vil have den billigste løsning.

2) Vær grundig når du retter i global.asa. Du kan risikere, at din applikation kommer til at hænge, så kun din udbyder kan sætte den i gang igen!

3) Når du ændrer din global.asa fil, vil serveren vente med at rekompilere den, indtil alle kørende processer er endte. Den vil samtidig nægte nye forespørgsler med meddelelsen "500-12 Application Restarting". Således vil hele din hjemmeside altså blive sat "offline", indtil den sidste bruger har forladt siden.

 

Hvad er global.asa?

Global.asa er en fil, der benyttes til at deklarere globale variable på applikations og sessions niveau.

Filen er event baseret og kan kun i begrænset omfang benyttes som en normal asp fil. Fx. kan den på nær ét tilfælde ikke benyttes til at skrive ud på en skærm mm. og er af samme årsag nogen gange lidt sværd at debugge.

Filen skal hedde "global.asa" og hører til i roden af dit domæne. Man kan kun have én global.asa fil pr. domæne, med mindre man har subdomæner, hvorved hvert subdomæne kan have sin egen global.asa fil.

 

Fast indhold

Global.asa har en rimelig streng opbygning og består af fire metoder, som hver især reagerer på givne hændelser.

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
   //Kode der udføres når applikationen starter
End Sub
Sub Application_OnEnd
   //Kode der udføres når applikationen lukker
End Sub
Sub Session_OnStart
   //Kode der køres når en session starter
End Sub
Sub Session_OnEnd
   //Kode der køres når en session slutter
End Sub
</SCRIPT>

Jeg vælger her at kode i VBScript, men filen kan kodes frit i det scriptsprog, som står en nærmest fx JScript.

Filen reagerer altså på fire hændelser, men undlades en af metoderne i filen, svarer dette blot til at lade den stå tom som herover.

Brug af scripting uden for <script> tag´ene resulterer i en fejl. Brug af html kode, eller funktioner, som ikke benyttes i nogen af de fire hændelser bliver ignoreret af serveren.

Det eneste kode, man kan have uden for de fire standard metoder, er andre metoder eller funktioner, altså ingen "løs" kode.

Bemærk at metoderne er event baserede. De kører altså kun, når en given event indtræffer, og de kan ikke kaldes fra andre asp sider. Tilsvarende kan evt. andre metoder i global.asa kun kaldes fra disse fire metoder og ikke fra andre asp sider.

Ud over metoderne herover har man mulighed for at deklarere objekter og typebiblioteker.

Herunder vil jeg beskrive metoderne nærmere ...

 

Application_OnStart

Hvornår?
Metoden køres, når ens applikation starter. Dette sker én gang, nemlig første gang en bruger går ind på et site. Metoden kaldes som det første og køres således før Session_OnStart
Når man har redigeret i sin global.asa fil, og serveren har rekompileret den, så genstartes ens applikation hvorved metoden igen køres én gang første gang en bruger går ind på ens site.

Hvad kan jeg?
Du har adgang til Application og Server objektet.

Hvad kan jeg ikke?
Du har ikke adgang til Session, Request og Response objektet. Kald til disse vil give fejl.

Bemærk:
Eftersom metoden kun køres een gang når den første session starter applikationen, behøves man ikke at låse og frigive applicationen ved Application.Lock og Application.Unlock.

 

Application_OnEnd

Hvornår?
Metoden kører én gang, når ens applikation slutter. Hvis du fx retter i din global.asa, så vil serveren først nægte adgang til nyankomne processer. Den vil herefter vente på at samtlige processer afsluttes. Når alle processer er afsluttet, kalder den denne metode, genkompilerer global.asa og genstarter applikationen.
Metoden kører som det sidste, dvs. den køres først efter Session_OnEnd er kaldt for sidste gang.

Hvad kan jeg?
Du har adgang til Application og Server objektet på nær Server.Mappath.

Hvad kan jeg ikke?
Du har ikke adgang til Session, Request og Response objektet samt Server.Mappath. Kald til disse vil give fejl.

Bemærk:
Metoden køres som den "anonyme bruger" på serveren. I tilfælde af der ikke er en sådan, eller den ikke kan logge på, da køres denne metode ikke.

 

Session_OnStart

Hvornår?
Metoden køres én gang, hver en bruger første gang går ind på et site. Hver gang en bruger åbner en browser og går ind på en side, starter der en session, som gør, at serveren kan holde styr på, hvem den kommunikerer med. Inden denne session startes, kaldes denne metode én gang.

Metoden køres således, inden den først kaldte side køres.

Hvad kan jeg?
Du har adgang til alle objekter dvs, Application, Server, Session, Response, Request og ObjectContext.

Bemærk:
Da denne metode køres, inden nogen sider vises, vil det være god kodestil at definere sine sessions variable her.
Hvis du i metoden angiver en redirect, da vil evt. kode efter denne redirect ikke blive udført.

 

Session_OnEnd

Hvornår?
Metoden køres én gang, inden en brugers session dør. Metoden køres enten eksplicit, hvis man kalder Session.Abandon eller når en session får timeout. Ved timeout kaldes først denne metode, dernæst frigiver serveren sine brugte ressourcer.

Hvad kan jeg?
Du har adgang til Application, Server og Session objektet på nær Server.Mappath.

Hvad kan jeg ikke?
Du har ikke adgang til Response og Request objektet samt Server.Mappath.

Bemærk:
Metoden køres som den "anonyme bruger" på serveren. I tilfælde af der ikke er en sådan, eller den ikke kan logge på, da køres denne metode ikke.

 

Hvad så nu?

Det var faktisk det. Herover står, hvad du kan med global.asa, og hvad du ikke kan. For at finde en fornuftig nytte kræver det selvfølgelig, at man ved hvad sessionen og applicationen kan bruges til. Måske er det også en god ide at kende lidt til Object og TypeLibrary deklerationer. Men i bund og grund er det det.

Men inden i slutter helt, skal vi da lige se et par eksempler på forskellige anvendelsesmuligheder.

 

Redirect så en bruger altid starter på en given side:

' Bemærk at dette kun virker hos brugere, som har cookies slået til
' da der ellers ikke dannes en unik sessions id
<SCRIPT Language=VBScript RUNAT=Server>
Sub Session_OnStart
   ' Definer en startside
   startPage = "/MyApp/StartHere.asp"
 
   ' Find den nuværende side
   currentPage = Request.ServerVariables("SCRIPT_NAME")

   ' Lav en sammenligning og redirect hvis de er forskellige
   If strcomp(currentPage,startPage,1) then
      Response.Redirect(startPage)
   End If End Sub
</SCRIPT>

 

Tæl online brugere:

' Bemærk at applikationen låses hver gang der tilgåes applikations variable
' Bemærk også at at brugerantallet ikke straks tælles ned,
' når en bruger lukker sin browser
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
   Sub Application_OnStart
      Application("intBrugereOnline") = 0
   End Sub
   Sub Session_OnStart
      Application.Lock
      Application("intBrugereOnline") = Application("intBrugereOnline") + 1
      Application.Unlock
   End Sub
   Sub Session_OnEnd
      Application.Lock
      Application("intBrugereOnline") = Application("intBrugereOnline") - 1
      Application.Unlock
   End Sub
</SCRIPT>

 

Gem connectionstrings som globale variable

' På denne måde behøves man ikke gå og huske conn strengen
' Mange gemmer conn strengen i en include, som så inkluderes på alle sider
' Med denne metode gemmes conn strengen en gang for alle
' Samtidig ses at server.mappath kan benyttes i metoden Application_OnStart
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
   Sub Application_OnStart
      Application("db1") = "DBQ=d:\home\domæne.dk\database\database.mdb;UID=;PWD=;"&_
             "Driver={Microsoft Access Driver (*.mdb)};"
      Application("db2") = "DBQ=" & Server.MapPath("database.mdb") &";UID=;PWD=;"&_
             "Driver={Microsoft Access Driver (*.mdb)};"
   End Sub
</SCRIPT>

 

Opdater database når brugere kommer online, og når de går offline

Mange spørger, hvordan de sætter deres brugere offline, når brugerne ikke logger af, men når de lukker deres browser.
Hvis en logud funktion kalder Session.Abandon, da vil nedenstående tage højde for begge dele.

Hvis brugeren lukker browseren, vil Session_OnEnd blive kaldt, når sessionen timer ud efter 10-20 minutter afhængig af, hvad man har sat den til.

Første gang der kommer en bruger ind på siden sættes en connectionstreng, herved slipper man for bøvl med at server.mappath ikke kan benyttes i Session_OnEnd
Læg mærke til at der i Session_OnStart sættes sessions variable ud fra det, som er indtastet i en login form.

Dette kræver, at ens login form er *.html og ikke *.asp. Hvis filen hed asp, så ville metoden jo kaldes, inden man indtaster i formen.

Bemærk også hvordan man her kan tjekke på login og redirecte hvis det fejler med mere.

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
   Sub Application_OnStart
      Application("db") = "Data Source="&Server.Mappath("database.mdb")&_
            ";Provider=Microsoft.Jet.OLEDB.4.0;"
   End Sub
   Sub Session_OnStart
      Session("bruger") = Replace(Request.Form("bruger"),"'","''")
      Session("kode") = Replace(Request.Form("kode"),"'","''")
      Dim Conn, rs
      Set Conn = Server.CreateObject("ADODB.Connection")
      Conn.Open Application("db")
      Set rs = Conn.Execute("Select * From tabel Where bruger = '"&_
            Session("bruger")&"' And kode = '"&Session("kode")&"'")
      If not rs.eof Then
         Session("id") = rs("Id")
         Conn.Execute("Update tabel Set online = True Where Id = "&Session("id"))
      Else
         Session.Abandon
         Response.Redirect "login.html"
         Conn.Close
         Set Conn = Nothing
      End If
      Conn.Close
      Set Conn = Nothing
   End Sub
   Sub Session_OnEnd
      Dim Conn
      Set Conn = Server.CreateObject("ADODB.Connection")
      Conn.Open Application("db")
      Conn.Execute("Update tabel Set online = False Where Id = "&Session("id"))
      Conn.Close
      Set Conn = Nothing
   End Sub
</SCRIPT>

 

 

stem her!


 

Valid XHTML 1.0! Valid CSS!

Startside  - Foretrukne  - E-mail - Sitemap

Til toppen >>

 

powered by FreeFind

hjemmesider webdesign frontpage grafik scripts asp html css tutorial hjemmeside  homepage programmering
hjemmesider webdesign frontpage grafik scripts asp html css tutorial hjemmeside  homepage programmering

 Annoncer her ...!

interaktivt, funktioner, afstemningsboks, debatforum, gæstebog, søgefunktion, afstemningsbokse, debatforums, gæstebøger, søgefunktioner, forums, interaktiv
 
artikler artikel web webmaster hjemmesider internettet programmering nettet © 2005 now@net artikler artikel web webmaster hjemmesider internettet programmering nettet