---
title: "on_end i global.asa"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/39278-on-end-i-global-asa"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Nisseman"
published: "2002-03-08T17:02:54.000Z"
updated: "2002-03-13T22:24:13.000Z"
replies: 20
views: 536
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/39278-on-end-i-global-asa"
---

# on_end i global.asa

_Sida 1 av 2._

## #1 — Nisseman, 2002-03-08T17:02Z

Nu har jag sökt igenom forumet men inte hittat nån lösning på mitt problem. Jag vill att användaren ska raderas ur databasen när den inte längre är aktiv på sidan.
Här är delar av min global.asa

```
Sub Session_OnEnd
  Application("aktiva") = Application("aktiva") - 1
  
  
  Set databas = Server.CreateObject("ADODB.Connection")
  mdbpath = Server.MapPath("*****.mdb")
  databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & mdbpath & ";"

  ip=Request.ServerVariables("REMOTE_ADDR")
  SQL = "DELETE * FROM online WHERE ip = '"& ip &"'"
  SET data = databas.Execute(SQL)
End Sub
```

Aktiva verkar fungera, men besökarna försvinner inte ur databasen, vad är fel?

Permalänk: https://www.webforum.nu/p/39278

## #2 — Harback, 2002-03-08T17:51Z

Session_onend överskattat

Har samma problem och det går nog inte att lösa eftersom Session_onend exekveras bara när man antingen kör Session.Abandon eller när Session.TimeOut träder in.  :l

Permalänk: https://www.webforum.nu/p/621722

## #3 — Nisseman, 2002-03-08T18:55Z

Trist

Jag använder session.timeout = 1 men det blir inte bättre ändå  :(

Permalänk: https://www.webforum.nu/p/621747

## #4 — PatrikB, 2002-03-08T19:13Z

Hur ser din global.asa ut från rad 1 till sista raden.

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/621760

## #5 — Nisseman, 2002-03-08T19:17Z

min global.asa

```
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

Sub Application_OnStart
  Application("aktiva") = 0
End Sub

Sub Application_OnEnd
  Application("aktiva") = 0
End Sub

Sub Session_OnStart

  Application("aktiva") = Application("aktiva") + 1
  

  id=session.sessionID
  ip=Request.ServerVariables("REMOTE_ADDR")
  namn = "undknown"
  datum = date & " " & time
  info = "undknown"
  besok = 0

   Set databas = Server.CreateObject("ADODB.Connection")
   mdbpath = Server.MapPath("*****.mdb")
   databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & mdbpath & ";"

   SQL = "SELECT * FROM namn WHERE ip = '"& ip &"'"
   SET data = databas.Execute(SQL)
   
   IF NOT data.eof THEN
     namn = data("namn")
	 info = data("info")
	 besok = data("besok")+1
	 
 	 SQL = "DELETE * FROM namn WHERE ip = '"& ip &"'"
	 SET data = databas.Execute(SQL)
	
 	 SQL = "DELETE * FROM online WHERE ip = '"& ip &"'"
	 SET data = databas.Execute(SQL)
	
   END IF

   SQL = "INSERT INTO namn(ip,namn,info,besok,senaste) VALUES('"& ip &"','"& namn &"','-','"& besok &"',#"& datum &"#)"
   SET data = databas.Execute(SQL)

   SQL = "INSERT INTO online(sessid,ip,namn) VALUES('"& id &"','"& ip &"','"& namn &"')"
   SET data = databas.Execute(SQL)
	
	
	
	Set databas = Server.CreateObject("ADODB.Connection")
	mdbpath = Server.MapPath("\db\counter.mdb")
	databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & mdbpath & ";"

	SQL = "SELECT * FROM counter WHERE id = 'server' "
	SET data = databas.Execute(SQL)

	antalBES = data("antal") + 1
	senaste = data("senaste")
	datum = date & " " & time

	SQL = "DELETE * FROM counter WHERE id = 'server' "
	SET data = databas.Execute(SQL)

	SQL = "INSERT INTO counter(id,antal,senaste) VALUES('server','"& antalBES &"',#"& datum &"#)"
	SET data = databas.Execute(SQL)

  
  
End Sub

Sub Session_OnEnd
  Application("aktiva") = Application("aktiva") - 1
  
  
  Set databas = Server.CreateObject("ADODB.Connection")
  mdbpath = Server.MapPath("*****.mdb")
  databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & mdbpath & ";"

  ip=Request.ServerVariables("REMOTE_ADDR")
  SQL = "DELETE * FROM online WHERE ip = '"& ip &"'"
  SET data = databas.Execute(SQL)
End Sub

</SCRIPT>
```

Permalänk: https://www.webforum.nu/p/621763

## #6 — Harback, 2002-03-08T21:48Z

Testa med att skriva med

```
Session.Timeout =1
```

först i Session_onstart

Permalänk: https://www.webforum.nu/p/621836

## #7 — Nisseman, 2002-03-08T22:17Z

Som jag sa så har jag redan testat det, men det hjälpte inte...
Kan det vara att jag varken får ip eller id från datorn i session_onend?

Permalänk: https://www.webforum.nu/p/621849

## #8 — Harback, 2002-03-08T22:23Z

Testa....

Testa att ta bort allt utan Application("aktiva") = Application("aktiva") - 1 i Session_Onend

Sen så rekomenderar jag att låsa när du skriver till en applikation så att det inte uppstår något problem om två samtidigt ändrar i applikationen...

ex. 
Application.Lock
Application("aktiva") = Application("aktiva") - 1
Application.UnLock

Permalänk: https://www.webforum.nu/p/621852

## #9 — Nisseman, 2002-03-08T22:50Z

Tack för tipset

Men det är ju i huvudsak databasen jag vill åt... Nån med andra ideer?

Permalänk: https://www.webforum.nu/p/621857

## #10 — PatrikB, 2002-03-09T06:58Z

Lägg Application_OnEnd efter Session_OnEnd

Kan ibland strula om de inte ligger i "körordningen"

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/621896

## #11 — Nisseman, 2002-03-09T12:41Z

Tyvärr

Så hjälpte det inte
Kan man inte skriva i databaser i session_onend?

Permalänk: https://www.webforum.nu/p/621965

## #12 — PatrikB, 2002-03-09T17:50Z

När du ändrar i global.asa så måste man starta om siten för att global.asa ska ta ändringarna på en gång.
Om man inte har tillgång till servern så kan man ta bort global.asa från wwwroot och sedan gå in på sidan. Ladda upp global.asa igen och sedan ytterligare gå in på sidan så laddas den nyss uppladdade global.asa filen.

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/622075

## #13 — Nisseman, 2002-03-09T20:33Z

Här är min uppdaterade global.asa, application("aktiva") och application("INaktiva") fungerar.
Det verkar som att den slutar i session_onend då jag försöker hämta sessionID för de andra sakerna som ska göras efter det görs inte, då undar jag om man inte kan hämta session.ID och remote_addr i session_onend?

```
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

Sub Application_OnStart
  Application("aktiva") = 0
  Application("INaktiva") = 0
End Sub

Sub Session_OnStart

  Application.Lock 
   Application("aktiva") = Application("aktiva") + 1
  Application.UnLock

  session.timeout = 1

  id=session.sessionID
  ip=Request.ServerVariables("REMOTE_ADDR")
  namn = "undknown"
  datum = date & " " & time
  info = "undknown"
  besok = 0

   Set databas = Server.CreateObject("ADODB.Connection")
   mdbpath = Server.MapPath("*****.mdb")
   databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & mdbpath & ";"

   SQL = "SELECT * FROM namn WHERE ip = '"& ip &"'"
   SET data = databas.Execute(SQL)
   
   IF NOT data.eof THEN
     namn = data("namn")
	 info = data("info")
	 besok = data("besok")+1
	 
 	 SQL = "DELETE * FROM namn WHERE ip = '"& ip &"'"
	 SET data = databas.Execute(SQL)
	
 	 SQL = "DELETE * FROM online WHERE ip = '"& ip &"'"
	 SET data = databas.Execute(SQL)
	
   END IF

   SQL = "INSERT INTO namn(ip,namn,info,besok,senaste) VALUES('"& ip &"','"& namn &"','-','"& besok &"',#"& datum &"#)"
   SET data = databas.Execute(SQL)

   SQL = "INSERT INTO online(sessid,ip,namn) VALUES('"& id &"','"& ip &"','"& namn &"')"
   SET data = databas.Execute(SQL)
	
	
	
	Set databas = Server.CreateObject("ADODB.Connection")
	mdbpath = Server.MapPath("*****.mdb")
	databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & mdbpath & ";"

	SQL = "SELECT * FROM counter WHERE id = 'server' "
	SET data = databas.Execute(SQL)

	antalBES = data("antal") + 1
	senaste = data("senaste")
	datum = date & " " & time

	SQL = "DELETE * FROM counter WHERE id = 'server' "
	SET data = databas.Execute(SQL)

	SQL = "INSERT INTO counter(id,antal,senaste) VALUES('server','"& antalBES &"',#"& datum &"#)"
	SET data = databas.Execute(SQL)

  
  
End Sub

Sub Session_OnEnd

  Application.Lock 
   Application("aktiva") = Application("aktiva") - 1
   Application("INaktiva") = Application("INaktiva") + 1
  Application.UnLock

  ip=Request.ServerVariables("REMOTE_ADDR")
  id=session.sessionID
  Application("ip") = ip
  Application("id") = id

  
  Set databas = Server.CreateObject("ADODB.Connection")
  mdbpath = Server.MapPath("*****.mdb")
  databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & mdbpath & ";"

  datum = date & " " & time
  
  SQL = "DELETE * FROM online WHERE ip = '"& ip &"'"
  SET data = databas.Execute(SQL)
  
  SQL = "INSERT INTO offline(sessid,ip,datum) VALUES('"& id &"','"& ip &"',#"& datum &"#)"
  SET data = databas.Execute(SQL)
End Sub

Sub Application_OnEnd
  Application("aktiva") = 0
End Sub

</SCRIPT>
```

Permalänk: https://www.webforum.nu/p/622116

## #14 — LarsG, 2002-03-09T20:52Z

I session_onEnd så finns det inget request-objekt. 

Det du kan göra är att lagra värdet för remote_addr i en session-variabel, t.ex. vid session_onStart.

Permalänk: https://www.webforum.nu/p/622119

## #15 — Nisseman, 2002-03-09T22:37Z

Det fungerade att lagra men databasen får fortfarande inget

Permalänk: https://www.webforum.nu/p/622158

## #16 — Nisseman, 2002-03-11T18:36Z

Kan man inte ändra i databaser i session_onend?

Permalänk: https://www.webforum.nu/p/622822

## #17 — @nders, 2002-03-11T18:47Z

Jo, det ska inte vara några problem, förutsatt att verkligen session_onend körs.

Hur ser din SQL-fråga ut nu, som du försöker köra i \_onend?

Mvh,

Permalänk: https://www.webforum.nu/p/622827

## #18 — Nisseman, 2002-03-13T07:15Z

Det är den som står med i global.asa men har tagit bort den nu eftersom den inte gjorde något och det verkade som min session_onend genererade fel (enligt loggboken). Men jag skulle uppskatta om jag fick hjälp med att få igång den igen...
Såhär var min mening ungefär:

```
session_onstart:
  session("userIP") = ip
  session("datum") = datum

session_onend:
  ip = session("userIP")
  id = session.sessionID
  datum = session("datum")
  
  Set databas = Server.CreateObject("ADODB.Connection")
  mdbpath = Server.MapPath("*****.mdb")
  databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & mdbpath & ";"

  SQL = "INSERT INTO offline(sessid,ip,datum) VALUES('"& id &"','"& ip &"',#"& datum &"#)"
  SET data = databas.Execute(SQL)
```

men det dyker inte upp nån data i databasen, jag är säker på att on end körs eftersom app("aktiva") ändras\[KOD\]

edit: kod taggarna var fel

Permalänk: https://www.webforum.nu/p/623387

## #19 — Harback, 2002-03-13T14:21Z

Det kan inte vara något enkelt fel som att du t.ex. har satt sessid eller ip till tal i databasen. Isåfall ska det inte vara några ' runt '" & id & "' eller '" & ip & "'. Eller att kanske det blir fel datumtyp när den ska in i databasen....

Testa att köra SQL-satsen utanför global.asa och se om det funkar...

Permalänk: https://www.webforum.nu/p/623545

## #20 — Nisseman, 2002-03-13T18:39Z

Testat nu och koden fungerade, synd...

Permalänk: https://www.webforum.nu/p/623660

---

Tråden på webben: https://www.webforum.nu/amne/asp/39278-on-end-i-global-asa  
Nästa sida: https://www.webforum.nu/amne/asp/39278-on-end-i-global-asa/page2.md
