/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Udelukkelse af bibliotek i statistik
Fra : Jens Gyldenkærne Cla~


Dato : 22-01-03 12:38

Jeg har etableret et tællersystem der tæller online-brugere og
totalt antal brugere ved hjælp af global.asa + en separat asp-fil.
Nu vil jeg gerne have holde nogle områder på serveren udenfor denne
statistik, men her er jeg ikke helt sikker på hvad der kan lade sig
gøre.

Den nuværende kode ser sådan ud:

Sub Application_OnStart
   ' Initialiser onlinevariabel
   application("intOnline") = 0
end sub

Sub Session_Onstart
   ' Forøg onlinevariabel.
   application("intOnline") = CInt(application("intOnline")) + 1
   
   ' Kør tællerfil
   Server.Execute ("/count.asp")
End sub

Sub Session_OnEnd
   ' Formindsk onlinevariabel
   application("intOnline") = CInt(application("intOnline")) - 1    

End Sub

Count.asp indeholder bl.a. følgende:
   
   set rs = conn.execute("countUser_sp")
   
   if not rs.EOF then
      Application("totalUsers") = rs(0)
   End if


Jeg kan ikke afgøre om jeg skal tjekke
Request.ServerVariables("SCRIPT_NAME") eller HTTP-referer eller
noget helt tredje. Og kan jeg gøre det i global.asa eller skal det
foregå i count.asp?

Kan det lade sig gøre med totalantallet? Og er der en mulighed for
at lave det også med onlinetallet (her er det ikke nok at tjekke
indgangssiden, der skal jo også holdes styr på at en session der
ikke er talt med ikke alligevel kører koden i session_onEnd).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

 
 
Jimmy (22-01-2003)
Kommentar
Fra : Jimmy


Dato : 22-01-03 13:13


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns930B807E8B63jcdmfdk@gyrosmod.dtext.news.tele.dk...
> ' Forøg onlinevariabel.
> application("intOnline") = CInt(application("intOnline")) + 1

Du mangler:
Application.Lock
og bagefter
Application.Unlock

Dette er for at undgå at to brugere der besøger dig på præcis samme
tidspunkt lægger én til den samme værdi.
Det samme gør sig gældende når du trækker én fra.

Dog afvikles session_onend ikke med sikkerhed.
Metoden regnes for upålidelig.


> Jeg kan ikke afgøre om jeg skal tjekke
> Request.ServerVariables("SCRIPT_NAME") eller HTTP-referer eller

SCRIPT_NAME er fin, REFERER er ikke så god, da der ikke er nogen referer når
man skriver sidens URL direkte og pga nogle browsere giver mulighed for at
ændre sin REFERER til hvad som helst.

Hvis du vil checke REFERER for derved at undgå at måle på den side der vises
bagefter bliver det meget uoverskueligt og du skal vedligeholde en liste.

Det er klart lettest at checke for SCRIPT_NAME og undlade opdatering af din
online-liste, hvis scriptet er på din positivliste.


> noget helt tredje. Og kan jeg gøre det i global.asa eller skal det
> foregå i count.asp?

Du kan checke for REFERER og SCRIPT_NAME i begge, men det er nok mest
overskueligt, hvis du lægger koden ud i count.asp så din global.asa ikke
bliver for stor.


> Kan det lade sig gøre med totalantallet? Og er der en mulighed for
> at lave det også med onlinetallet (her er det ikke nok at tjekke
> indgangssiden, der skal jo også holdes styr på at en session der
> ikke er talt med ikke alligevel kører koden i session_onEnd).

Jeg forstår ikke ovenstående.
Måske har jeg slet ikke forstået indlægget?

Mvh
Jimmy



Jens Gyldenkærne Cla~ (22-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-01-03 14:10

Jimmy skrev:

> Du mangler:
> Application.Lock
> og bagefter
> Application.Unlock

O.k. - de er sat på nu.


> Dog afvikles session_onend ikke med sikkerhed.
> Metoden regnes for upålidelig.

Er der nogen alternativer?
Jeg har i øvrigt ikke oplevet problemer hidtil. Hvis session_onEnd
skulle fejle nogle gange, burde min onlinetæller gradvist vokse.
Det er ikke sket.

> SCRIPT_NAME er fin, REFERER er ikke så god, da der ikke er
> nogen referer når man skriver sidens URL direkte og pga nogle
> browsere giver mulighed for at ændre sin REFERER til hvad som
> helst.

Men vil SCRIPT_NAME, kørt i count.asp ikke bare vise "count.asp"?
Det er her jeg er i tvivl om hvad der sker. Kørt med Server.Execute
fra global.asa - hvad er så SCRIPT_NAME hhv. REFERER?

> Hvis du vil checke REFERER for derved at undgå at måle på den
> side der vises bagefter bliver det meget uoverskueligt og du
> skal vedligeholde en liste.

Hvad mener du? Jeg er ude efter at få fat i navnet - eller
rettere stien - på den fil der er kaldt på sitet. Så kan jeg lave
en konstruktion ala:

If instr(<sriptsti>, "admin/") = 0 Then
   ' Kør tællerkode.
End If

> Det er klart lettest at checke for SCRIPT_NAME og undlade
> opdatering af din online-liste, hvis scriptet er på din
> positivliste.

Kan du give et eksempel.


> Du kan checke for REFERER og SCRIPT_NAME i begge,

Vil de give samme resultat?


>> Kan det lade sig gøre med totalantallet? Og er der en
>> mulighed for at lave det også med onlinetallet (her er det
>> ikke nok at tjekke indgangssiden, der skal jo også holdes
>> styr på at en session der ikke er talt med ikke alligevel
>> kører koden i session_onEnd).

> Jeg forstår ikke ovenstående.
> Måske har jeg slet ikke forstået indlægget?

Det tror jeg da . Jeg mener blot at hvor det måske er nogenlunde
overskueligt at tjekke om en side skal tælles med når den hentes
(session_onStart) er det - så vidt jeg kan se - noget sværere at
afgøre om en Session_onEnd-hændelse skal sætte onlinetælleren ned
eller ej. Både admin-siderne (der ikke skal tælles med) og de
almindelige sider genererer jo en session - og session_onEnd
indeholder vel næppe oplysninger om hvilken side der først blev
requested i den.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Klaus Ambrass (22-01-2003)
Kommentar
Fra : Klaus Ambrass


Dato : 22-01-03 15:00

Jens Gyldenkærne Clausen <jens@gyros.invalid> wrote in
news:Xns930B90081EB04jcdmfdk@gyrosmod.dtext.news.tele.dk:

> Jimmy skrev:
>
>
>
> Det tror jeg da . Jeg mener blot at hvor det måske er nogenlunde
> overskueligt at tjekke om en side skal tælles med når den hentes
> (session_onStart) er det - så vidt jeg kan se - noget sværere at
> afgøre om en Session_onEnd-hændelse skal sætte onlinetælleren ned
> eller ej. Både admin-siderne (der ikke skal tælles med) og de
> almindelige sider genererer jo en session - og session_onEnd
> indeholder vel næppe oplysninger om hvilken side der først blev
> requested i den.

Hvorfor ikke bare flytte "tæl een op" funktionen fra Session_Start til de
sider, som skal være med i statistikken? Så kan siderne ligge hvorsom helst
uden at påvirke tælleren hvis det er det, de (ikke) skal.

--

Klaus Ambrass
IT - Storstrøms Amt
kam@it.stam.dk

Jimmy (22-01-2003)
Kommentar
Fra : Jimmy


Dato : 22-01-03 15:22


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns930B90081EB04jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Jimmy skrev:
>

> > Dog afvikles session_onend ikke med sikkerhed.
> > Metoden regnes for upålidelig.
>
> Er der nogen alternativer?

Både og.

Du kan se på Tony's eksempel:
http://www.asp.dk/articles.asp?mode=show_article&tech_id=1&article_id=93

Eller du kan lave din egen baseret på IsClientConnected:
http://support.microsoft.com/default.aspx?scid=KB;en-us;q182892



> Jeg har i øvrigt ikke oplevet problemer hidtil. Hvis session_onEnd
> skulle fejle nogle gange, burde min onlinetæller gradvist vokse.
> Det er ikke sket.

Det er muligt de har fået rettet problemet.
Microsoft anbefalede tidligere man ikke anvendte den.



> Men vil SCRIPT_NAME, kørt i count.asp ikke bare vise "count.asp"?

Hvad sker der, hvis du skriver værdien til en textfil / AppVar?


> > Hvis du vil checke REFERER for derved at undgå at måle på den
> > side der vises bagefter bliver det meget uoverskueligt og du
> > skal vedligeholde en liste.
>
> Hvad mener du? Jeg er ude efter at få fat i navnet - eller
> rettere stien - på den fil der er kaldt på sitet. Så kan jeg lave
> en konstruktion ala:

REFERER peger bagud.
Når du fra Side1 linker til Side2 vil du på Side2 kunne hente REFERER.
I den vil der stå Side1.

Nu skal du så finde ud af om der skal tælles.
Dette er jo Sisyfos-arbejde, da du skal vedligeholde en liste på *alle* de
sider der linker til en side der ikke skal tælles med.
Hvis du vil have en liste skal du lave en terminal liste - dvs. en liste med
specifikke sider der ikke skal tælles med.

Løsningen, IMO, er at inkludere count.asp på alle de sider der *skal* tælles
med.
Jeg foreslår den inkluderes *efter* </html>, da Netscape 4.7 ikke viser
siden før al kode er HTML er afviklet.

Jeg formoder du er med på at global.asa kun køres *en* gang - nemlig når din
bruger hitter siden første gang.
Derfor kan du ikke tælle sider vha. global.asa.


> > Det er klart lettest at checke for SCRIPT_NAME og undlade
> > opdatering af din online-liste, hvis scriptet er på din
> > positivliste.
>
> Kan du give et eksempel.

Du inkluderer count.asp på samtlige sider der skal tælles.
Så er du fri for at vedligeholde en liste og
REFERER/SCRIPT_NAME-problematikken.



> > Du kan checke for REFERER og SCRIPT_NAME i begge,
>
> Vil de give samme resultat?

Nej da - REFERER peger på den side du *kommer* fra og SCRIPT_NAME er den
side du *er* på.


Jeg tror jeg er træt, for jeg har en ide om at vi snakker forbi hinanden

mvh
Jimmy



Jens Gyldenkærne Cla~ (22-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-01-03 16:15

Klaus Ambrass skrev:

> Hvorfor ikke bare flytte "tæl een op" funktionen fra
> Session_Start til de sider, som skal være med i statistikken?

Det er ikke antallet af hits, men antallet af brugere jeg gerne vil
tælle. Derfor kan jeg ikke bare inkludere tjekket på alle
almindelige sider.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jens Gyldenkærne Cla~ (22-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-01-03 16:49

Jimmy skrev:

> Du kan se på Tony's eksempel:
> http://www.asp.dk/articles.asp?mode=show_article&tech_id=1&arti
> cle_id=93

Umiddelbart ville jeg være meget betænkelig ved at lægge adskillige
Applicationvariable ind - for oven i købet at skulle løbe dem alle
igennem hver gang der skal tælles. Men jeg kan jo se at de har kørt
det uden problemer bl.a. på netcoders.dk - så den er vel god nok.
Indtil videre er jeg dog udmærket tilfreds med den nuværende
løsning - som nævnt har onlinetallet været rimelig stabilt i de ca.
10 dage vi har haft det på.


>> Men vil SCRIPT_NAME, kørt i count.asp ikke bare vise
>> "count.asp"?

> Hvad sker der, hvis du skriver værdien til en textfil /
> AppVar?

Glimrende råd. Script_name og Script_path viste begge det samme -
nemlig navnet på den fil der var kaldt af brugeren. Helt perfekt.

> REFERER peger bagud.
> Når du fra Side1 linker til Side2 vil du på Side2 kunne hente
> REFERER. I den vil der stå Side1.

Det er jeg helt klar over. Det jeg var i tvivl om var om kaldet fra
Side1, gennem global.asa og via Server.Execute til Side2 ville stå
som et REFERER-kald hvis man undersøgte det på Side2. Det er ikke
tilfældet.

> Løsningen, IMO, er at inkludere count.asp på alle de sider der
> *skal* tælles med.

Jeg har lettere ved at fjerne de sider der ikke skal tælles med -
og en inkludering vil også, i hvert fald med min nuværende kode
betyde at der tælles hver gang siden kaldes, ikke blot første gang
i en session.

> Jeg formoder du er med på at global.asa kun køres *en* gang -
> nemlig når din bruger hitter siden første gang.

Jep - det er netop også brugere, ikke sider, jeg ønsker at tælle.


> Du inkluderer count.asp på samtlige sider der skal tælles.

Nu fungerer det jo pt, men kan man lave en inkluderingsløsning og
stadig kun tælle brugere?


> Jeg tror jeg er træt, for jeg har en ide om at vi snakker
> forbi hinanden

Til en vis grad har du nok ret. Men dit indlæg fik mig alligevel på
rette vej - tak for det. Jeg kunne naturligvis blot have testet
løs, men jeg har ikke adgang til en testserver, og har ikke lyst
til at få alle sider på sitet til at fejle flere gange end højst
nødvendigt.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jimmy (22-01-2003)
Kommentar
Fra : Jimmy


Dato : 22-01-03 17:29


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns930BAB267144Ajcdmfdk@gyrosmod.dtext.news.tele.dk...
> Jimmy skrev:
>
> > Du kan se på Tony's eksempel:
> > http://www.asp.dk/articles.asp?mode=show_article&tech_id=1&arti
> > cle_id=93
>
> Umiddelbart ville jeg være meget betænkelig ved at lægge adskillige
> Applicationvariable ind - for oven i købet at skulle løbe dem alle
> igennem hver gang der skal tælles.

Helt enig - Metoden er dyr i ydelse, men så vidt jeg har kunnet se af den
vil den virke.
Jeg ville ikke selv anvende den - ville blot referere til den som
inspiration.

Jeg har også en online-liste på et site, og der har jeg en hidden frame, som
opdaterer en database med et timestamp.

Så længe den unikke bruger har opdateret indenfor 1 1/2 minutter vurderer
jeg at han er online.
Jeg har ikke selv haft behov for IsClientConnected.


> Det er jeg helt klar over. Det jeg var i tvivl om var om kaldet fra
> Side1, gennem global.asa og via Server.Execute til Side2 ville stå
> som et REFERER-kald hvis man undersøgte det på Side2. Det er ikke
> tilfældet.

Nej nej - REFERER findes kun når der er klikket på et link.
Ellers er den tom.


> > Løsningen, IMO, er at inkludere count.asp på alle de sider der
> > *skal* tælles med.
>
> Jeg har lettere ved at fjerne de sider der ikke skal tælles med -
> og en inkludering vil også, i hvert fald med min nuværende kode
> betyde at der tælles hver gang siden kaldes, ikke blot første gang
> i en session.

Jeg tror det er her vi går galt af hinanden.

Hvis du inkluderer count_users.asp (IMO mere sigende navn) på alle sider
opdaterer du blot brugerens række i databasen med tidspunktet - brug evt.
SessionID eller noget andet unikt for brugeren.

Du kan så udbygge den, hvor du i global.asa sletter alle de række der er
over x minutter gamle eller blot kører et script to gange om dagen.



> Nu fungerer det jo pt, men kan man lave en inkluderingsløsning og
> stadig kun tælle brugere?

Jep - Se ovenfor.


Mvh
Jimmy



Jens Gyldenkærne Cla~ (22-01-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-01-03 18:00

Jimmy skrev:

> Jeg har ikke selv haft behov for IsClientConnected.

Så vidt jeg kunne læse det link du gav stod der at metoden kunne
resultere i 100% cpu-belastning i op til 30 sekunder - og de
frarådede at man skulle benytte den på en produktionsserver. Så jeg
har ikke overvejet den nærmere.


> Nej nej - REFERER findes kun når der er klikket på et link.
> Ellers er den tom.

Det vil jeg skrive bag øret.


> Hvis du inkluderer count_users.asp (IMO mere sigende navn) på
> alle sider opdaterer du blot brugerens række i databasen med
> tidspunktet - brug evt. SessionID eller noget andet unikt for
> brugeren.

O.k. - men det vil betyde langt flere databasekald end jeg har nu.

Samtidig skulle jeg ændre min totaltæller. Pt. aflæser den bare
værdien af @@IDENTITY - den genereres under alle omstændigheder ved
en insert-handling, og jeg slipper på den måde for at tælle
postantallet. Der kan naturligvis være enkelte oversprungne numre i
tabellen, men den upræcision kan jeg leve pt. Pt er der 3387 rækker
i tabellen - og der er ingen huller i autonummerrækken endnu.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Jimmy (22-01-2003)
Kommentar
Fra : Jimmy


Dato : 22-01-03 18:14


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> wrote in message
news:Xns930BB71F15FDAjcdmfdk@gyrosmod.dtext.news.tele.dk...
> Jimmy skrev:
>
> > Jeg har ikke selv haft behov for IsClientConnected.
>
> Så vidt jeg kunne læse det link du gav stod der at metoden kunne
> resultere i 100% cpu-belastning i op til 30 sekunder - og de
> frarådede at man skulle benytte den på en produktionsserver. Så jeg
> har ikke overvejet den nærmere.

HEHE - Microsoft udvikler nogle stabile teknologier.


> > Hvis du inkluderer count_users.asp (IMO mere sigende navn) på
> > alle sider opdaterer du blot brugerens række i databasen med
> > tidspunktet - brug evt. SessionID eller noget andet unikt for
> > brugeren.
>
> O.k. - men det vil betyde langt flere databasekald end jeg har nu.

Ja det vil være ret krævende.
Til gengæld har du mulighed for et hav af information omkring brugerne.
Hvilken browser, IP, hvilken aktuel side de befinder sig på mv.
Det er naturligvis ikke sikkert du har behov for en sofistikeret
onlineliste.


> Samtidig skulle jeg ændre min totaltæller. Pt. aflæser den bare
> værdien af @@IDENTITY - den genereres under alle omstændigheder ved
> en insert-handling, og jeg slipper på den måde for at tælle
> postantallet.

Enig - Performancemæssigt er din løsning fin.

Jeg er derimod glad for at have alle data og bagefter kunne trække statistik
på REFERER (Hvilken side der linker til mig og hvor mange gange en bruger
har klikket på netop det link) og sende en takkenote til websitet eller
forslå partneraftaler mv.

Igen, ens behov er forskellige.

Mvh
Jimmy



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste