Avatar billede jezuz Nybegynder
01. november 2004 - 22:20 Der er 20 kommentarer

Problemer med Global.asa

Hej allesammen..

Jeg har et brugersystem som også har en tilhørende onlineliste og en online tæller...
Det virker på flg. måde:
Når brugeren logger ind så bliver hans/hendes session ID gemt i en database og så henter jeg bare detaljerne fra denne.. Men problemet er at jeg bruger Global.asa til at administrere brugerne, således at i min Session_OnEnd sletter den det ID som session'en var.. Eller dvs at det SKULLE den, men det gør den bare ikke...
Når brugeren bruger min logud knap virker det fint men ikke når de bare lukker vinduet (Hvilket de fleste gør) og lader systemet time out..
Er der nogen som kan hjælpe på denne her???

Mvh
Jesper
Avatar billede sbm Nybegynder
01. november 2004 - 23:10 #1
Prøv at smide din global.as her. Det giver lidt mere at arbejde ud fra.
Avatar billede sbm Nybegynder
01. november 2004 - 23:13 #2
Et kvalificeret bud på en global.asa - så håber jeg dine funktioner hedder det samme?
-------------------------------------------------------------------------------------

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
    Application.lock
    Session.Timeout = 5
    Application("aktiveSessioner") = 0
    Application("totaleSessioner") = 0
    Application.unlock
End Sub

Sub Session_OnStart
    Application.lock
    Session("brugerId") = 0
    Application("totaleSessioner") = Application("totaleSessioner") + 1
    Application("aktiveSessioner") = Application("aktiveSessioner") + 1
    Application.unlock
End Sub

Sub Session_OnEnd
      Application.lock
    Application("aktiveSessioner") = Application("aktiveSessioner") - 1
      Application.unlock
End Sub
</SCRIPT>
Avatar billede jezuz Nybegynder
02. november 2004 - 11:04 #3
Hejsa...
Min global.asa ser således ud:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
  Session.Timeout = 1
End Sub

Sub Application_OnEnd
  ' Skriv kode som skal køres når applikationen (serveren) stoppes
End Sub

Sub Session_OnStart
'Åbner databaseforbindelse     
Set ConnBR = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("dbase/TblActiveusers.mdb")
ConnBR.Open DSN

strSQL95 = "INSERT into ActUsers ("
  strSQL95 = strSQL95 & "Active_ID) "
strSQL95 = strSQL95 & "values( "
  strSQL95 = strSQL95 & "'" & Session("bruger_id") & "')"
ConnBR.Execute(strSQL95)

'Lukker databasen
ConnBR.Close
Set ConnBR = Nothing
End Sub

Sub Session_OnEnd
'Åbner databaseforbindelse     
Set ConnBR2 = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("dbase/TblActiveusers.mdb")
ConnBR2.Open DSN

  strSQL94 = "Delete from ActUsers where Active_ID = " & Session("bruger_id") & ""
ConnBR2.Execute(strSQL94)

'Lukker databasen
ConnBR2.Close
Set ConnBR2 = Nothing
End Sub
</SCRIPT>

Og når brugeren logger ind så burde den da automatisk indsætte ham/hende i databasen og ligeledes når han/hun lukker vinduet, så burde han/hun slettes fra databasen når session'en timer out. Men dette sker ikke...

Mvh
Jesper
Avatar billede keysersoze Guru
02. november 2004 - 11:07 #4
prøv at lav en asp-fil med indholdet fra din session_onstart (bare udskift session med et fiktivt id) og læg filen samme sted som global.asa filen og se om det virker når du kører asp-filen eller om der kommer en fejl
Avatar billede sbm Nybegynder
02. november 2004 - 11:59 #5
Jeg skal lige sikre mig at jeg har forstået dig rigtigt.... Den indsætter korrekt ved start af en session, men lukker ikke som den skal ved afslutningen af den?
Avatar billede sbm Nybegynder
02. november 2004 - 12:02 #6
Bortset fra det, er jeg ikke begejstret for at du lægger denne information i databasen. Så bør du i hvert fald som minimum sørge for at du starter på en tom tabel når din side kaldes første gang, for ellers kan du have XX sessioner i tabellen, og hvis så strømmen forsvinder for serveren, vil du i princippet aldrig få dem fjernet igen.
Avatar billede sbm Nybegynder
02. november 2004 - 12:16 #7
Bortset fra det, så kunne det godt se ud som om du sætter ' og ' rundt om Session("bruger_id") i din insert, men at du glemmer det i din delete...?
Avatar billede jezuz Nybegynder
02. november 2004 - 12:48 #8
Hej igen..
Når brugeren logger ind har jeg lavet et script, som indsætter brugeren i databasen, men hvis dette script ikke er der så bliver han/hun ikke indsat i tabellen.
Så man kan godt sige at det heller ikke indsætter korrekt når man logger ind... Men dette gør den heller ikke når man lukker vinduet og venter på at Session'en timer out..
Og til det sidste her så virker det fint når man logger ud for så kører den flg. funktion:
Delete from ActiveUsers where Active_ID = '" & Session("bruger_id") & "'"
Altså samme som min global.asa..
Så det må altså være i min global.asa det er galt med.. Eller jeg ved ikke

Mvh
Jesper
Avatar billede keysersoze Guru
02. november 2004 - 13:19 #9
har du prøvet det jeg skrev? altså lave 2 asp-filer - en med hver funktion men bare med et fiktivt id - og så lægge dem i samme mappe som global.asa og se om de fungerer?
Avatar billede sbm Nybegynder
02. november 2004 - 13:34 #10
Nej det er *IKKE* det samme som i din global.asa. Prøv selv at sammenligne meget nøje:

Delete from ActiveUsers where Active_ID = '" & Session("bruger_id") & "'"
Delete from ActUsers where Active_ID = " & Session("bruger_id") & ""
Avatar billede sbm Nybegynder
02. november 2004 - 13:36 #11
Der er i hvert fald to forskelle som jeg kan spotte.

Forskellige tabelnavne. ActiveUsers kontra ActUsers
Enkeltpling rundt om id kontra ingen plinger rundt om.
Avatar billede sbm Nybegynder
03. november 2004 - 14:02 #12
Fik du det til at virke?
Avatar billede jezuz Nybegynder
03. november 2004 - 19:48 #13
Nej... Jeg kan sgu ikke gennemskue det.. Jeg har ordnet koderne så de er 100% ens... Men det virker stadig ikke.. Men hvis der ikke er nogen som har nogle flere input så bare smid et svar en eller anden, så finder jeg en anden løsning.. Men jeg siger da tak for jeres indlæg...

Mvh
Jesper
Avatar billede sbm Nybegynder
03. november 2004 - 20:29 #14
Prøv eventuelt at lave noget meget simpelt.

Opret en application variabel, og læg en til for hver session der starter, og træk en fra for hver session der slutter. Ultra simpelt.

Se så om du overhovedet får eksekveret din global.asa, for hvis heller ikke det virker, kan det godt være at du laver nok så fin kode, men det er et andet sted skoen klemmer.

Ligger din global.asa det rigtige sted?
Hvilken server kører det på? Er det chiliASP der kører på en linux-server, og der fejlagtigt ikke er de fornødne rettigheder på global.asa?
Avatar billede sbm Nybegynder
03. november 2004 - 20:30 #15
....og hvis din global.asa IKKE ligger det samme sted som den anden fil hvor du kører dit log-ud, skal du nok ikke bruge præcis den samme sti til database-filen, for så rammer du nok ved siden af.
Avatar billede keysersoze Guru
03. november 2004 - 20:41 #16
jezuz >> har du prøvet det jeg har foreslået???
Avatar billede jezuz Nybegynder
04. november 2004 - 18:00 #17
Hej igen...
>>sbm Jeg har lavet en ny global.asa som ser således ud:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
Application("NumUsers") = 0
End Sub

Sub Application_OnEnd
' Skriv kode som skal køres når applikationen (serveren) stoppes
End Sub

Sub Session_OnStart
Application("NumUsers") = Application("NumUsers") + 1
End Sub

Sub Session_OnEnd
Application("NumUsers") = Application("NumUsers") - 1
End Sub
</SCRIPT>
Og inde i min .asp fil har jeg flg. kode:
<%= Application("NumUsers") %>
Men den skriver slet ikke noget overhovdet.. Hverken 0 eller det antal som er online... Så NU må jeg sige at jeg officelt er 100% sat af... :-(
Hvad kan det tyde på??

>> keysersoze  Jeg har ikke prøvet det du har forslået for jeg ikke forstår hvad det er du mener jeg skal gøre... Og hvilke funktioner du taler om...

Mvh
Jesper
Avatar billede keysersoze Guru
04. november 2004 - 18:14 #18
argh! hvorfor sagde du så ikke noget første gang - ellers er det jo umuligt at hjælpe...

prøv at tag nedenstående kode og sætte direkte ind i en asp-fil, læg den i samme mappe som din global.asa-fil og se om den fungerer eller ej.

--------------
<%
'Åbner databaseforbindelse     
Set ConnBR = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("dbase/TblActiveusers.mdb")
ConnBR.Open DSN

strSQL95 = "INSERT into ActUsers ("
  strSQL95 = strSQL95 & "Active_ID) "
strSQL95 = strSQL95 & "values( "
  strSQL95 = strSQL95 & "'1')"
ConnBR.Execute(strSQL95)

'Lukker databasen
ConnBR.Close
Set ConnBR = Nothing
%>
--------------

Hvis det virker så er du i hvert fald sikker på at koden er rigtig og så er vi nået det længere - virker den ikke kan der være flere grunde til det, mest nærliggende er så at at undersøge om global.asa ligger det rigtige sted og om webhotellet (hvis du kører siden på et webhotel) i det hele taget understøtter global.asa
Avatar billede sbm Nybegynder
04. november 2004 - 22:41 #19
Jeg mener at global.asa skal ligge i webtræets rodkatalog. Gør den det?
Avatar billede jezuz Nybegynder
07. november 2004 - 14:20 #20
>> keysersoze: ok.. denne ting du nævner her har jeg prøvet. Jeg har placeret de to koder i hhv. login.asp og logout.asp... Og der virker det fint.. Så længe min brugere logger ud af siden virker dette da også helt fint.. Problemet er bare at det er der jo de færreste, som gør...

Jeg kører lige nu min side på min egen IIS.. Selve filerne ligger i flg. struktur:
inetpub/wwwroot/LW/SBNnew/www/default.asp (osv.)
Og min global.asa ligger her:
inetpub/wwwroot/LW/SBNnew/www/globa.asa

Er dette ikke det rigtige sted at ha den liggende???

Mvh
Jesper
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester