Just nu i M3-nätverket
Jump to content

Global.asa


Rest man Klaymen

Recommended Posts

Rest man Klaymen

Har följande i min global.asa

 

<script language=[GRÅ]"vbscript"[/GRÅ] Runat=[GRÅ]"server"[/GRÅ]>

[color="#0000ff"]Sub[/color] [b]Session[/b]_onEnd

[b]Application[/b].lock
[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [b]Session[/b]([GRÅ]"username"[/GRÅ])
[b]Application[/b].unlock		

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
</script>

 

den ligger i min wwwroot katalog på webhotellet, som har stöd för global.asa

 

men när jag på aspsidan skriver <%=application("user")%> så syns inget trots att jag vet att massa sessioner har slutat.

 

Vad är felet?

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Session_onEnd är inte pålitlig! I äldre versioner av IIS triggades den överhuvudtaget inte vid sessionsslut (är inte säker på hur det är med IIS6+, eftersom jag för länge sedan slutade använda denna händelse pga problemen)

 

 

Link to comment
Share on other sites

Session_OnEnd fungerar bra, men den avslutas normalt inte förrän den session timeout som är inställd på servern slutar, normalt 20 minuter.

 

Du visar inte i din kod vart du sätter Session("username") någonstans, är du säker på att den är satt ?

 

 

Link to comment
Share on other sites

Rest man Klaymen

Jorå den är satt... på en annan sida... så den vet jag att den är satt.. men om jag tar session.abandon.. kommer session("username") ändå att hamna i application("user") eller raderas den innan?

 

EDIT och hur ändrar jag session.timeout?

 

 

/ RMK

Jobbiga_färger.

 

[inlägget ändrat 2004-10-05 16:24:41 av Rest man Klaymen]

Link to comment
Share on other sites

Session_OnEnd ska köras när du kör Session.Abandon eller när sessionen tar slut så det borde fungera.

 

Pröva att skriva något annat där istället för Session("username") som "blaha" och se om det dyker upp.

 

[color="#0000ff"]Sub[/color] [b]Session[/b]_onEnd

[b]Application[/b].lock
[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [GRÅ]"blaha"[/GRÅ]
[b]Application[/b].unlock 

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

Har du någon annan kod i session_onend före den kod du visar här som kan ställa till det ?

 

Hur gör du förresten när du testar detta, du kan inte göra detta:

 

[MÄRK]<%[/MÄRK]
[b]Session[/b].Abandon
[MÄRK]%>[/MÄRK]
[MÄRK]<%[/MÄRK]= [b]Application[/b]([GRÅ]"user"[/GRÅ]) [MÄRK]%>[/MÄRK]

 

Eftersom sessionen är fortfarande giltig tills att scriptet avslutas, däremot när du laddar om sidan borde det du satte förra gången synas.

 

[inlägget ändrat 2004-10-05 16:38:25 av PBL]

Link to comment
Share on other sites

Rest man Klaymen

nä jag har inget annat i session_onend och session.abandon ligger på en annan sida än där jag hämtar application("user")

jag har också testat att skriva nåt annat i application("user") typ som blaha men det funkar itne heller...

 

dessutom undrar jag om jag kan anropa databaser och ändra dem direkt i global.asa?

 

EDIT jo nu funkar det om jag skriver "blaha"... men skriver jag Session("username") så funkar det inte... kan det vara för att Session("username") töms innan Session_OnEnd utförs?

 

 

/ RMK

Jobbiga_färger.

 

[inlägget ändrat 2004-10-05 17:17:15 av Rest man Klaymen]

Link to comment
Share on other sites

dessutom undrar jag om jag kan anropa databaser och ändra dem direkt i global.asa?

 

Ja det går bra.

 

EDIT jo nu funkar det om jag skriver "blaha"... men skriver jag Session("username") så funkar det inte... kan det vara för att Session("username") töms innan Session_OnEnd utförs?

 

Alla sessions variabler ska finnas tillgängliga i session_onend

 

Jag vet faktiskt inte riktigt vad som kan vara fel men funkar det med "blaha" istället för sessions variabeln så får du försöka kolla upp innehållet i den den på något sätt.

 

Link to comment
Share on other sites

Rest man Klaymen

om jag vill anropa databaser i global.asa hur gör jag då.. vanlig vbscript eller? och vilken katalog ska jag utgå ifrån, eftersom global.asa ligger i rootkatalogen?

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

På vanligt sätt som du gör i dina ASP scripts.

 

Om du kör med access använder du med fördel Server.MapPath för att få rätt sökväg till filen.

 

 

Link to comment
Share on other sites

Rest man Klaymen

ok jag ska prova.. det visade sig också att min session("username") tömdes på grund av ett fel i koden ... men jag ska prova med databasgrejen

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Att Session_OnEnd körs som det är tänkt/som man skulle tro är nog en överdrift. Googla eller sök här på Eforum så ser du mååånga exempel på att Session_OnEnd ställer till problem.

 

/Cluster

----------------------------------------------------

"Den som försummar att dricka ur erfarenhetens källa

kommer troligen att dö av törst i okunnighetens öken."

-----> http://unic.serveftp.com/eforum <-----

 

Link to comment
Share on other sites

Rest man Klaymen

Jo det ställer till massa problem för mig också.. men hur ska man göra då?

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Snarare så att folk ständigt missupfattar hur den ska användas.

 

Det fanns en bugg i IIS4 men inte längre, det handlar bara om att använda det korrekt.

 

Vi har ju redan konstaterat att det fungerar, han också konstaterat att det var ett fel i hans kod som orsakade hans problem så varför återgå till att prata om att felet ligger i session_onend ?

 

 

 

Link to comment
Share on other sites

Rest man Klaymen

löste problemet.. men det är flera kvar :D

 

så här ser min global.asa ut nu

<script language=[GRÅ]"vbscript"[/GRÅ] Runat=[GRÅ]"server"[/GRÅ]>
[color="#0000ff"]Sub[/color] [b]Application[/b]_onStart

[b]Application[/b].lock
[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [GRÅ]""[/GRÅ]
[b]Application[/b].unlock

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

[color="#0000ff"]Sub[/color] [b]Session[/b]_onEnd

[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [b]Session[/b]([GRÅ]"username"[/GRÅ])

[color="#0000ff"]Set[/color] Connect = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])

Connect.Open [GRÅ]"Driver={Microsoft Access Driver (*.mdb)}; DBQ="[/GRÅ] &[b]Server[/b].MapPath([GRÅ]"/db/fanclub/fanclub.mdb"[/GRÅ]) & [GRÅ]";"[/GRÅ]

SQL = [GRÅ]" UPDATE users SET online = 0 WHERE username = '"[/GRÅ] & [b]Session[/b]([GRÅ]"username"[/GRÅ]) & [GRÅ]"'"[/GRÅ]

Connect.[color="#0000ff"]Execute[/color] SQL ,, 128
Connect.Close	

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
</script>

 

 

application("user") tilldelas mycket riktigt Session("username") men bara när jag använder Session.abandon... om jag stänger fönstret funkar det inte alls... dessutom, hela resten av min kod (den som ska sätta online=0 i databasen) exekveras varken vid session.abandon eller när jag stänger fönstret...

 

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Du kan inte använda Server.MapPath i session_onend, konstruera istället connection strängen i application_start och stoppa in den i en application variabel som du använder överallt där du behöver.

 

http://www.microsoft.com/windows2000/en/server/iis/default.asp?url=/windows2000/en/server/iis/htm/asp/glob2y90.htm

 

Under remarks:

"You cannot call the MapPath method in the Session_OnEnd script."

 

 

[inlägget ändrat 2004-10-05 18:21:09 av PBL]

Link to comment
Share on other sites

Rest man Klaymen

så här ?

 

<script language=[GRÅ]"vbscript"[/GRÅ] Runat=[GRÅ]"server"[/GRÅ]>
[color="#0000ff"]Sub[/color] [b]Application[/b]_onStart

path = [b]Server[/b].MapPath([GRÅ]"/db/fanclub/fanclub.mdb"[/GRÅ])

[b]Application[/b].lock
[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [GRÅ]""[/GRÅ]
[b]Application[/b].unlock

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

[color="#0000ff"]Sub[/color] [b]Session[/b]_onEnd

[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [b]Session[/b]([GRÅ]"username"[/GRÅ])

[color="#0000ff"]Set[/color] Connect = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])

Connect.Open [GRÅ]"Driver={Microsoft Access Driver (*.mdb)}; DBQ="[/GRÅ] & path & [GRÅ]";"[/GRÅ]

SQL = [GRÅ]" UPDATE users SET online = 0 WHERE username = '"[/GRÅ] & [b]Session[/b]([GRÅ]"username"[/GRÅ]) & [GRÅ]"'"[/GRÅ]

Connect.[color="#0000ff"]Execute[/color] SQL ,, 128
Connect.Close	

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
</script>

 

funkar ändå inte... och varför aktiveras inte session_onend när jag stänger fönstret?

 

EDIT

 

gjorde så här i stället och då funkar det

 

<script language=[GRÅ]"vbscript"[/GRÅ] Runat=[GRÅ]"server"[/GRÅ]>
[color="#0000ff"]Sub[/color] [b]Application[/b]_onStart

[b]Application[/b]([GRÅ]"path"[/GRÅ]) = [b]Server[/b].MapPath([GRÅ]"/db/fanclub/fanclub.mdb"[/GRÅ])

[b]Application[/b].lock
[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [GRÅ]""[/GRÅ]
[b]Application[/b].unlock

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

[color="#0000ff"]Sub[/color] [b]Session[/b]_onEnd

[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [b]Session[/b]([GRÅ]"username"[/GRÅ])

[color="#0000ff"]Set[/color] Connect = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])

Connect.Open [GRÅ]"Driver={Microsoft Access Driver (*.mdb)}; DBQ="[/GRÅ] & [b]Application[/b]([GRÅ]"path"[/GRÅ]) & [GRÅ]";"[/GRÅ]

SQL = [GRÅ]" UPDATE users SET online = 0 WHERE username = '"[/GRÅ] & [b]Session[/b]([GRÅ]"username"[/GRÅ]) & [GRÅ]"'"[/GRÅ]

Connect.[color="#0000ff"]Execute[/color] SQL ,, 128
Connect.Close	

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
</script>

 

men det aktiveras ändå inte när jag stänger fönstret.. bara när jag kör session.abandon.. varför?

 

 

[inlägget ändrat 2004-10-05 18:27:25 av Rest man Klaymen]

Link to comment
Share on other sites

Ja, fast du måste stoppa in den i Application objektet:

 

<script language=[GRÅ]"vbscript"[/GRÅ] Runat=[GRÅ]"server"[/GRÅ]>
[color="#0000ff"]Sub[/color] [b]Application[/b]_onStart

[b]Application[/b]([GRÅ]"path"[/GRÅ]) = [b]Server[/b].MapPath([GRÅ]"/db/fanclub/fanclub.mdb"[/GRÅ])
[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [GRÅ]""[/GRÅ]

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

[color="#0000ff"]Sub[/color] [b]Session[/b]_onEnd

[b]Application[/b]([GRÅ]"user"[/GRÅ]) = [b]Session[/b]([GRÅ]"username"[/GRÅ])

[color="#0000ff"]Set[/color] Connect = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])

Connect.Open [GRÅ]"Driver={Microsoft Access Driver (*.mdb)}; DBQ="[/GRÅ] & [b]Application[/b]([GRÅ]"path"[/GRÅ]) & [GRÅ]";"[/GRÅ]

SQL = [GRÅ]" UPDATE users SET online = 0 WHERE username = '"[/GRÅ] & [b]Session[/b]([GRÅ]"username"[/GRÅ]) & [GRÅ]"'"[/GRÅ]

Connect.[color="#0000ff"]Execute[/color] SQL ,, 128
Connect.Close 

[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]
</script>

 

Du behöver inte heller göra lock, unlock i application_start eftersom den är garanterad att endast köras en gång då servern startas eller global.asa ändras.

 

[inlägget ändrat 2004-10-05 18:27:28 av PBL]

Link to comment
Share on other sites

men det aktiveras ändå inte när jag stänger fönstret.. bara när jag kör session.abandon.. varför?

 

Det här är den vanligaste missuppfattningen om session_onend, alltså den körs BARA antingen då sessionen slutar (20 minuter eller vad servern är inställd på) eller då du kör Session.Abandon

 

Det spelar alltså ingen roll om du stänger webläsar fönstret, sessionen lever i 20 minuter.

 

[inlägget ändrat 2004-10-05 18:30:36 av PBL]

Link to comment
Share on other sites

Rest man Klaymen

och det kan jag inte ändra på.. genom att skriva session_timeout = 5 eller nåt?

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Jodå, du kan ändra det i ditt script med Session.Timeout = 5, lämpligtvis i session_onstart så alla sessioner får samma värde men det är en rätt kort sessionstid.

 

 

 

Link to comment
Share on other sites

Rest man Klaymen

Och om jag ändrar session.timeout till 5 så kommer alla som är inloggade att loggas ut efter 5 minuters aktivitet... såvida jag inte gör något script på sidan som uppdaterar sidan var 4e:e minut eller så .... antagligen med javascript eller nåt då

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Rest man Klaymen

gör en liten fanclub, och då ska man kunna se vilka användare som är online, och det blir lite missledande om det står att en person är online fast han/hon loggade ut för 20 minuter sen... men det är klart... det är väl bättre än inget :D

 

tack för all hjälp du ska få massa poäng!

 

 

/ RMK

Jobbiga_färger.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...