Hallo Rouven,
Session.Abandon sorgt dafür, dass die betroffene Session (also nur eine) Serverseitig gelöscht wird, so dass auch wenn ein Client mit dem ehemals passenden Cookie wieder auf die Seite kommt, er keine dazu passende Session mehr findet.
Okay, d.h. also, es wird nur die Session mit der fuer diesen User gueltigen SessionID serverseitig geloescht, andere User sind dann davon nicht betroffen?
Tja, die Antwort ist nicht so einfach. Das ist das alte Problem, "wie stelle ich fest wer alles online ist". In der Regel muss man dazu etwas tricksen und sich in der Datenbank Aktivitäten o.ä. protokollieren. Das ist alles etwas lästig, zumal es den Vorteil des Session zerstört: Die Session kann sich ja gerade Daten über die verschiedenen Seiten merken OHNE die Datenbank zu kontaktieren, wenn man das jetzt also trotzdem muss, wäre das sehr schade.
Genauso sehe ich das auch....
Ich habe mich noch nicht intensiver damit beschäftigt, aber es gibt in ASP noch das APPLICATION-Objekt, das noch überhalb des Session-Objektes steht und globale Daten enthält. Ich glaube allerdings nicht, dass du mit dessen Hilfe sowas bewerkstelligen könntest (außer wieder mit Trick, so a la (keine Ahnung ob die Syntax stimmt)
Ich habe da in einem fremden Login-Script etwas in der global.asa gefunden, was deinem Beispiel nahe kommt:
<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>
Es zaehlt aber nur die User, die gerade online sind inkl. nach Session timeout ausgeloggte Benutzer, wenn ich das richtig sehe. (Das birgt naemlich ein weiteres Problem: Was, wenn der User sich nicht ueber ein Logoff-Script ausloggt?)
Allerdings ist mir unklar, wie ich "fremde" serverseitige Session-Objekte identifizieren, abfragen und loeschen kann. (Wenn ich Dich richtig verstadnen habe, wird mit Abandon ja nur die eigene Session geloescht - Dein Instr erscheint mir so nicht moeglilch wenn ich mir den obigen Code in der global.asa anschaue, da Application nicht uebergeordnet der Session ist...)
Hast Du noch eine andere Idee?
Danke & Gruss
Tobi
Admin-Seite:
Application("destroyusers") = "PersonA, PersonB, PersonC"beliebige Seite:
If (InStr(Application("destroyusers"), Session("Benutzername")) >= 0) then
Session.Abandon
Response.Write("Ihre Session wurde beendet.")
Response.End
end ifRouven