---
title: "Problem med global.asa"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/147833-problem-med-global-asa"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "oskars"
published: "2006-06-08T09:47:52.000Z"
updated: "2006-06-08T12:24:15.000Z"
replies: 14
views: 480
page: 1
pages: 1
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/147833-problem-med-global-asa"
---

# Problem med global.asa

## #1 — oskars, 2006-06-08T09:47Z

Hej på er =) Nu har jag kört fast!

Jag använder global.asa för att kolla antalet besökare just nu, samt för att göra lite ändringar i databasen när sessionen går ut... men det vill sig inte. 

Så här ser min global.asa ut:

```php

<SCRIPT LANGUAGE=VBSCRIPT RUNAT=SERVER>

	SUB Application_OnStart
	Application("besokare") = 0
	END SUB

	SUB Session_OnStart
	Application("besokare") = Application("besokare") + 1
	END SUB

	SUB Session_OnEnd
	Application("besokare") = Application("besokare") - 1

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

	Set RecSet = Server.CreateObject("ADODB.Recordset")
	RecSet.Open "Select * From tblUsers WHERE userID = " & Session("id") & "", Connect, 3, 3

	Session("id") = ""
	Session("inloggad") = 0
	RecSet("userLoginStatus") = 0

	RecSet.Update

	RecSet.Close
	Set RecSet = Nothing
	Connect.Close
	Set Connect = Nothing

	END SUB

</SCRIPT>
```

 

Jag vill att när sessionen gått ut så ska userLoginStatus sättas till "0"... Men den gör inte det... Jag har så klart en logga ut-knapp som fungerar perfekt, men det är en annan historia... Den här lösningen är till för när medlemmarna inte loggar ut ordentligt utan bara stänger ned sin webläsare utan att klicka på logga ut-knappen först.

Vad har jag gjort för fel?   :q 

Tacksam för hjälp!   :) 

Oskar

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

## #2 — @nders, 2006-06-08T10:00Z

I session_onend har du, om jag minns rätt, inte tillgång till några sessionsvariabler, utan endast Session.SessionID.
Så, du får lagra session.sessionid i ett fält i användartabellen och använda det när du uppdaterar.

Och!

Det finns ingen anledning att öppna ett recordset för att uppdatera.
Kör en UPDATE-fråga direkt istället, typ:

```
strSQL = "UPDATE tblUsers SET userLoginStatus = 0 WHERE SessionID = " & Session.SessionID
Connect.Execute strSQL,,128
```

Det finns inte heller någon anledning att sätta sessionsvariabler i session_onend. Sätt dem i onstart istället. 

Läs också emissions tråd om [tomsträngskonkatering](http://www.webforum.nu/showthread.php?t=142490).

mvh

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

## #3 — J.N., 2006-06-08T10:03Z

HEJ!

Jag har aldrig gjort detta, och har kanske helfel. En sak är konstig; när session går ut, hur kan du då hämta personen med det id:t?
RecSet.Open "Select \* From tblUsers WHERE userID = " & Session("id") & "", Connect, 3, 3

Det finns kodexempel som fixar besöksstatistik, men det har du säkert koll på.

Gör gärna lite snygga indrag också, då blir det enklare att läsa koden.

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

## #4 — oskars, 2006-06-08T11:35Z

anders, hm, okej... jag hänger inte riktigt med.. jag har ju användar IDet i en kolumn i databasen.. kolumnen heter userID och innehåller användarens unika ID... är de det du menar? Gärna om du vill förklara lite enklare :)

J.N, jo jag har också funderat på det där! Ska testa Anders grej först =) tack

J.N, du skriver "Gör gärna lite snygga indrag också, då blir det enklare att läsa koden."... Visa gärna ett exmpel på hur jag kan tabba bättre =)

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

## #5 — @nders, 2006-06-08T11:37Z

> anders, hm, okej... jag hänger inte riktigt med.. jag har ju användar IDet i en kolumn i databasen.. kolumnen heter userID och innehåller användarens unika ID... är de det du menar?

Nej, det är inte det jag menar. Som jag skrev ovan, du har inte tillgång till några sessionsvariabler i session_onend, utan endast sessionsid:t, som är ett långt tal som tilldelats av webbservern för att webbservern ska kunna avgöra vilka sessionsvariabler som tillhör vilken användare.

När användaren loggar in, spara Session.SessionID i ett fält i användartabellen. När session_onend inträffar, gör en update där du har detta sessions-id som villkor.

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

## #6 — oskars, 2006-06-08T11:39Z

Vad är "användartabellen" för något? och vilket fält menar du? =) Du får ursäkta, är nybörjare!

edit:

bl.a det här händer vid login:

	Session("id") = RecSet("userID")
	Session("userName") = RecSet("userLoginName")
	Session("inloggad") = 1
	Session.Timeout = 10
	RecSet("userLoginStatus") = "1"

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

## #7 — @nders, 2006-06-08T11:41Z

> Vad är "användartabellen" för något?

Uhm, tblUsers, den du lagrar dina användare i?

> och vilket fält menar du?

Det nya fält du skapar i tabellen som skall innehålla sessions-id:t.

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

## #8 — oskars, 2006-06-08T11:43Z

jaha åfan... 

så t.ex

RecSet("userSessionID") = Session.SessionID

och sen i global.asa... hur ska jag göra där?

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

## #9 — @nders, 2006-06-08T11:46Z

> så t.ex
> 
> RecSet("userSessionID") = Session.SessionID

Till exempel.

> och sen i global.asa... hur ska jag göra där?

Det försökte jag ju beskriva i mitt första inlägg i denna tråd. Testa och försök. :)

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

## #10 — J.N., 2006-06-08T11:48Z

> **oskars skrev:**
>
> ...
> J.N, du skriver "Gör gärna lite snygga indrag också, då blir det enklare att läsa koden."... Visa gärna ett exmpel på hur jag kan tabba bättre =)

Okej, men det hade du fixat själv; det är ju endast ett indrag, och tre sub:ar

```
<SCRIPT LANGUAGE=VBSCRIPT RUNAT=SERVER> 
SUB Application_OnStart 
	Application("besokare") = 0 
END SUB

SUB Session_OnStart 
	Application("besokare") = Application("besokare") + 1 
END SUB

SUB Session_OnEnd 
	Application("besokare") = Application("besokare") - 1 

	osv...

	Connect.Close 
	Set Connect = Nothing 

END SUB
</SCRIPT>
```

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

## #11 — oskars, 2006-06-08T11:50Z

\*Do'h\* Lite ivrig här. Sorry :D

Så det räcker alltså med dessa rader för att uppdatera någonting i databasen:

```php

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

strSQL = "UPDATE tblUsers SET userLoginStatus = 0 WHERE userSessionID = " & Session.SessionID
Connect.Execute strSQL,,128

Connect.Close
Set Connect = Nothing
```

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

## #12 — @nders, 2006-06-08T11:52Z

> Så det räcker alltså med dessa rader för att uppdatera någonting i databasen:

Jepp, ser bra ut! (y)
(under förutsättning att sessionsid-fältet är av taltyp förstås.)

Jag hade också bytt anslutningstyp till OLEDB, men det kan vi ta sedan.

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

## #13 — OveRRidE, 2006-06-08T11:54Z

Du använder Server.MapPath i Session_OnEnd, vilket inte är möjligt. Eftersom script i t.ex. session_onend körs implicit i bakgrunden på servern, kommer du inte se några felmeddelanden, annat än ev. i Application Eventlog i Windows. 

[Läs mer här, i min grundliga undersökning av just detta problem](http://www.webforum.nu/showthread.php?t=57495).

Som tråden beskriver; du får lagra en färdig, fysisk sökväg till databasen i en applikationsvariabel som du sätter i Application_OnStart istället. Då behöver du inte köra Server.MapPath i Session_OnEnd.

/red. Applikationsvariabel! Inte session. ;)

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

## #14 — oskars, 2006-06-08T12:05Z

mina vänner... Jag försöker förstå så gott jag kan =)

override, ska jag skriva så här i OnStart?

application("strConn") = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" & server.mappath("/dir/dir/sökvägen.mdb")

men hur ska jag skriva om min Server.MapPath?

EDIT:
så här kanske?

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "Driver={Microsoft Access Driver (\*.mdb)}; DBQ=" & application("strConn")

strSQL = "UPDATE tblUsers SET userLoginStatus = 0 WHERE userSessionID = " & Session.SessionID 
Connect.Execute strSQL,,128 

Connect.Close 
Set Connect = Nothing

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

## #15 — @nders, 2006-06-08T12:24Z

> override, ska jag skriva så här i OnStart?

Jag är inte override, men jag svarar ändå. ;)
Jepp, i **application\_**onstart.

> men hur ska jag skriva om min Server.MapPath?

Lägger du den i application_onstart behöver du inte skriva om den.

> så här kanske?

Nästan. I open-raden räcker detta:

```
Connect.Open Application("strConn")
```

mvh

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/147833-problem-med-global-asa
