<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
Application("ActiveUsers") = 0
End Sub
Sub Session_OnStart
Session.Timeout = 20
Session("Start") = Now
Application.Lock
Application("ActiveUsers") = Application("ActiveUsers") + 1
Application.UnLock
End Sub
Sub Session_OnEnd
Application.Lock
Application("ActiveUsers") = Application("ActiveUsers") - 1
Application.UnLock
End Sub
</SCRIPT>
OK, das Skript sagt schon mal einiges. Das mit den nicht-"logoff"-Sessions ist auch nicht wirklich ein Problem, der zerstört der Server nach einer bestimmten Inaktivität automatisch, bei meinem Provider z.B. 20 min.
So, jetzt mal zu Application und Session:
Ich habs nicht ausprobiert, wie gesagt, habe das app-Objekt bisher nicht genutzt. Aber mein Visual Studio bietet mir die Verwendung innerhalb einer beliebigen ASP-Seite an.
Nehmen wir also folgendes an: Ich habe meiner Application in einem String mitgeteilt, welche UserNames ich kicken will, dann geht es jetzt nur noch darum, bei irgend einem Seitenaufruf nachzugucken, ob mich das betrifft.
Sagen wir mal, ich wolle einem Nutzer mitteilen, er ist im Moment gebannt. ich setze also seinen UserName in das Application-Objekt (wie ich das dort drin verwalte, so mit Array oder String sei mal dahin gestellt) - dann nehme ich mir z.B. die login.asp:
Ich stelle zunächst fest "Benutzername und Passwort stimmen überein - soll ich denn sonst noch was beachten?" - Wenn ich mir jetzt meinen bann nicht in die DB sondern die Application geschrieben habe gehe ich schlicht und einfach hin und sage:
If (Session("benutzername") = Application("gebannt")) then ...
-> unter der Annahme, in gebannt stünde nur genau ein Benutzername drin, das meinte ich oben mit Verwaltung...
Ich mache mir also die globalen Variablen über alle Sessions hinweg zu nutze um meine einzelne Session zu beeinflussen (das ist wie ein Client auf dem Server selbst, mein Skript ist ja quasi der Anwendung untergeordnet).