|
| Problemer med Session_OnEnd Fra : Thomas Due |
Dato : 28-11-03 08:13 |
|
Hej,
Jeg har en større web application hvor jeg forsøger at holde en liste
over aktive brugere. Det er for så vidt også lykkedes. Mit problem er
dog at der ikke bliver ryddet op i dem igen.
Er der noget jeg har fundamentalt misforstået med hensyn til
Session_OnEnd eller hvad? Min opfattelse er at Session_OnEnd bliver
udført når Session.Abandon bliver kaldt, eller når sessionen timer ud.
Det er tilsyneladende dog ikke tilfældet, i det aktive sessions godt
nok, bliver tilføjet til dataset'et, men de bliver ikke fjernet igen.
Hvad har jeg misforstået, eller gjort galt?
Min kode for henholdsvis Session_OnStart og Session_OnEnd ser således
ud, Application_OnStart er medtaget af hensyn til definitionen på
dataset'et, ligeledes instantieringen af dataset'et:
' ---> definition af dataset'et <---
<object runat="server" scope="Application" id="rstActiveUsers"
progid="ADODB.RecordSet">
</object>
' ---> definition af dataset'et <---
' ---> Application_OnStart <---
Sub Application_OnStart
Application.Lock
Application("ConnString") = "DSN=ScanXWeb;DRIVER={SQL Server}"
Application("Visitors") = 0
rstActiveUsers.Fields.Append "SesId", adInteger
rstActiveUsers.Fields.Append "User", adVarChar, 15
rstActiveUsers.Fields.Append "User IP", adVarChar, 15
rstActiveUsers.Fields.Append "Browser", adVarChar, 255
rstActiveUsers.Fields.Append "Started", adDate
rstActiveUsers.Fields.Append "Page", adVarChar, 50
' Next I open our recordset so that we can use it.
' That basically gets everything ready for our
' first user.
rstActiveUsers.Open
Application.UnLock
End Sub
' ---> Application_OnStart <---
' ---> Session_OnStart <---
Sub Session_OnStart
Session.Timeout = 20
Session.LCID = 1030
Session("Start") = Now()
if not rstActiveUsers.EOF then rstActiveUsers.MoveLast
rstActiveUsers.AddNew
rstActiveUsers.Fields("SesId").Value = Session.SessionID
rstActiveUsers.Fields("User").Value = ""
rstActiveUsers.Fields("User IP").Value =
Request.ServerVariables("REMOTE_HOST")
rstActiveUsers.Fields("Browser").Value =
Request.ServerVariables("HTTP_USER_AGENT")
rstActiveUsers.Fields("Started").Value = Now()
rstActiveUsers.Fields("Page").Value =
Request.ServerVariables("HTTP_REFERER")
rstActiveUsers.Update
Session("AccessLevel") = 0 ' Initialize the session
Application.Lock
Application("Visitors") = Application("Visitors") + 1
Application.UnLock
End Sub
' ---> Session_OnStart <---
' ---> Session_OnEnd <---
Sub Session_OnEnd
rstActiveUsers.MoveFirst
rstActiveUsers.Find "SesId=" & Session.SessionID, 0,
AdSearchForward, adBookmarkFirst
if not rstActiveUsers.EOF then
rstActiveUsers.Delete aaAffectCurrent
end if
' ---> Session_OnStart <---
--
Thomas Due
Software Developer
Scanvaegt Nordic A/S
Posted with XanaNews version 1.15.8.1
| |
pepss (28-11-2003)
| Kommentar Fra : pepss |
Dato : 28-11-03 09:20 |
|
"Thomas Due" skrev
> Jeg har en større web application hvor jeg forsøger at holde en liste
> over aktive brugere. Det er for så vidt også lykkedes. Mit problem er
> dog at der ikke bliver ryddet op i dem igen.
>
> Er der noget jeg har fundamentalt misforstået med hensyn til
> Session_OnEnd eller hvad? Min opfattelse er at Session_OnEnd bliver
> udført når Session.Abandon bliver kaldt, eller når sessionen timer ud.
> Det er tilsyneladende dog ikke tilfældet, i det aktive sessions godt
> nok, bliver tilføjet til dataset'et, men de bliver ikke fjernet igen.
>
> Hvad har jeg misforstået, eller gjort galt?
jeg ved ikke om det har noget med det at gøre men jeg havde problemet da jeg
brugte en Access database.
den var for langsom til at blive kørt i session_onend
--
pepss
den ordblinde der prøver at blive web-designer
www.cafe-flirt.dk
www.team-blitz.dk
| |
Chrisser (28-11-2003)
| Kommentar Fra : Chrisser |
Dato : 28-11-03 09:42 |
|
pepss wrote:
> jeg ved ikke om det har noget med det at gøre men jeg havde
> problemet da jeg brugte en Access database.
> den var for langsom til at blive kørt i session_onend
Ja de to fungerer ikke så godt sammen - ingen ved vist hvorfor men mange har
bøvlet med det..
Chrisser
| |
pepss (28-11-2003)
| Kommentar Fra : pepss |
Dato : 28-11-03 11:32 |
|
"Chrisser" <invalid@invalid.invalid> skrev i en meddelelse
news:bq71mg$j0j$1@sunsite.dk...
> pepss wrote:
> > jeg ved ikke om det har noget med det at gøre men jeg havde
> > problemet da jeg brugte en Access database.
> > den var for langsom til at blive kørt i session_onend
>
> Ja de to fungerer ikke så godt sammen - ingen ved vist hvorfor men mange
har
> bøvlet med det..
ja det skal jeg love for! jeg brugte en lille månede tid på det min
løgsing var at gå over til MySQL som så også gav nogle flere fordele (da jeg
fik det hele rettet til)
--
pepss
den ordblinde der prøver at blive web-designer
www.cafe-flirt.dk
www.team-blitz.dk
| |
Thomas Due (28-11-2003)
| Kommentar Fra : Thomas Due |
Dato : 28-11-03 11:37 |
|
Chrisser wrote:
> pepss wrote:
> > jeg ved ikke om det har noget med det at gøre men jeg havde
> > problemet da jeg brugte en Access database.
> > den var for langsom til at blive kørt i session_onend
>
> Ja de to fungerer ikke så godt sammen - ingen ved vist hvorfor men
> mange har bøvlet med det..
Det skal jeg ikke kunne sige noget om, for jeg anvender slet ikke
Access. Jeg kører på en MS SQL Server 2000. Men det dataset jeg
anvender til brugere ligger exclusivt i hukommelsen. Der er slet ingen
forbindelse imellem det og databasen.
--
Thomas Due
Software Developer
Scanvaegt Nordic A/S
Posted with XanaNews version 1.15.8.1
| |
Chrisser (28-11-2003)
| Kommentar Fra : Chrisser |
Dato : 28-11-03 11:40 |
|
Thomas Due wrote:
> Det skal jeg ikke kunne sige noget om, for jeg anvender slet ikke
> Access. Jeg kører på en MS SQL Server 2000. Men det dataset jeg
> anvender til brugere ligger exclusivt i hukommelsen. Der er slet
> ingen forbindelse imellem det og databasen.
Hmm, hvad har det så forbindelse til ?
( jeg studsede faktisk også lidt over koden - derfor har jeg ikke svaret )
Chrisser
| |
Thomas Due (28-11-2003)
| Kommentar Fra : Thomas Due |
Dato : 28-11-03 12:41 |
|
Chrisser wrote:
> Thomas Due wrote:
> > Det skal jeg ikke kunne sige noget om, for jeg anvender slet ikke
> > Access. Jeg kører på en MS SQL Server 2000. Men det dataset jeg
> > anvender til brugere ligger exclusivt i hukommelsen. Der er slet
> > ingen forbindelse imellem det og databasen.
>
> Hmm, hvad har det så forbindelse til ?
DataSet'et der indeholder de aktive brugere er oprettet i hukommelsen.
Der er ikke kontakt til en database. Som det fremgår at
Application_OnStart koden bliver kolonnerne oprettet runtime, i
hukommelsen.
I enhver praktisk henseende skulle det så gerne opfattes som om det er
et dataset fra databasen. Det fungere fint med hensyn til at indsætte
poster. Det virker bare ikke når de skal ud igen.
Jeg er lidt bange for at Sessionid måske er "tomt" når Session_OnEnd
affyres.
--
Thomas Due
Software Developer
Scanvaegt Nordic A/S
Posted with XanaNews version 1.15.8.1
| |
Chrisser (28-11-2003)
| Kommentar Fra : Chrisser |
Dato : 28-11-03 12:48 |
|
Thomas Due wrote:
> DataSet'et der indeholder de aktive brugere er oprettet i
> hukommelsen. Der er ikke kontakt til en database. Som det fremgår at
> Application_OnStart koden bliver kolonnerne oprettet runtime, i
> hukommelsen.
>
> I enhver praktisk henseende skulle det så gerne opfattes som om det
> er et dataset fra databasen. Det fungere fint med hensyn til at
> indsætte poster. Det virker bare ikke når de skal ud igen.
Hvis jeg bare forstod hvordan ovenstående fungerede...har du fundet det et
eller andet sted ?
> Jeg er lidt bange for at Sessionid måske er "tomt" når Session_OnEnd
> affyres.
Behøver du ikke være, den er der i Session_OnEnd
Chrisser
| |
Klaus Ambrass (05-12-2003)
| Kommentar Fra : Klaus Ambrass |
Dato : 05-12-03 09:09 |
|
"Thomas Due" <tdue@mail_remove_.dk> wrote in news:bq6sh6$3bu$2@sunsite.dk:
> Hej,
>
> Jeg har en større web application hvor jeg forsøger at holde en liste
> over aktive brugere. Det er for så vidt også lykkedes. Mit problem er
> dog at der ikke bliver ryddet op i dem igen.
>
> Er der noget jeg har fundamentalt misforstået med hensyn til
> Session_OnEnd eller hvad? Min opfattelse er at Session_OnEnd bliver
> udført når Session.Abandon bliver kaldt, eller når sessionen timer ud.
> Det er tilsyneladende dog ikke tilfældet, i det aktive sessions godt
> nok, bliver tilføjet til dataset'et, men de bliver ikke fjernet igen.
>
> Hvad har jeg misforstået, eller gjort galt?
>
> Min kode for henholdsvis Session_OnStart og Session_OnEnd ser således
> ud, Application_OnStart er medtaget af hensyn til definitionen på
> dataset'et, ligeledes instantieringen af dataset'et:
>
<snip kode>
Får du ikke nogen fejl som kunne give et hint om hvad der er galt?
Jeg har selv rodet med on-the-fly recordsets hvilket er en god ting.
Måske hænger hele miseren på hvilken slags Open du laver i
Application_start.
Du angiver blot rstActiveUsers.Open - hvis du ikke explicit angiver noget
om låsning og cursortype, defaulter recordsettet måske til den forkerte
type, og du kan ikke bruge .Find. Det havde jeg selv en masse bøvl med. JEg
endte med at lave noget mere simpelt ved at bruge et dictionaryobjekt.
--
Klaus Ambrass
IT - Storstrøms Amt
kamNO@SPAMit.stam.dk
| |
Thomas Due (08-12-2003)
| Kommentar Fra : Thomas Due |
Dato : 08-12-03 08:32 |
|
Klaus Ambrass wrote:
> Får du ikke nogen fejl som kunne give et hint om hvad der er galt?
> Jeg har selv rodet med on-the-fly recordsets hvilket er en god ting.
> Måske hænger hele miseren på hvilken slags Open du laver i
> Application_start.
Det ved jeg faktisk ikke. Men jeg må jo prøve at lave en eller anden
log funktion. Det er den eneste måde jeg har at lave debugging i
Session_OnEnd ikke?
> Du angiver blot rstActiveUsers.Open - hvis du ikke explicit angiver
> noget om låsning og cursortype, defaulter recordsettet måske til den
> forkerte type, og du kan ikke bruge .Find. Det havde jeg selv en
> masse bøvl med.
Ok, det vil jeg da undersøge.
--
Thomas Due
Software Developer
Scanvaegt Nordic A/S
Posted with XanaNews version 1.15.8.1
| |
|
|