Kann man irgendwie prüfen, ob es solche, ich nenne sie mal ungültige, Scripte gibt?
Siehe unten.
Gibt es eine Möglichkeit, beides zu bereinigen ohne dabei auf den Ablauf der Gültigkeit der Session zu warten?
Jein - es gibt einen Windows-Prozess der das Zeug verwalt, den kann man "Recyclen".
Genauer gesagt verwaltet der IIS aber keine Sessions sondern nur Application Pools - und je nachdem wie schlau die konfiguriert sind, lassen sich diese auch einzeln recyclen.
Darin sind sämtliche Applikations- und Sessionvariblen enthalten, die irgendwie diesem Pool zugeordnet sind.
Wenn das Ding schlecht konfiguriert ist, sind sämtliche Daten alle Webs auf diesem IIS in einem Pool der dann schnell mal mehrere hundert MiB groß wird.
In ordentlich konfigurierten Umgebungen hat zumindest jedes Web seinen eigenen Pool - in Spezialfällen kann sogar jedes Script seinen eigenen Pool bekommen um andere nicht zu stören.
Das bedeutet, wenn ich eine DB Verbindung aufbaue und der user in dem Moment abbricht, bleibt sie bestehen bis die DB sie Killt obwohl das Script im Hintergrund weiter läuft und sie dort, wenn die Seite ordnungsgemäß Aufgebaut wird beendet werden würde?
Andererseits, wenn ich eine DB Verbindung aufbaue sie schließe und der user dann abbricht, bin ich, was die DB angeht, sauber?
Ob der User in seinem Browser abbricht ist nicht relevant - das Script läuft am Server weiter, ungeachtet dessen was der Benutzer in seinem Browser tut.
Bekommt der IIS oder das .Net-Framework mit, wenn ich als user solch böse Dinge wie Abbruch und so treibe?
Sofern die Übertragung über HTTP erfolgt und wir nicht von Benutzern im Kontext des Betriebssystems reden bekommt der Webserver das nicht mit - das .NET-Framework ist für den Webserver nur ein mittel zum Zweck um ASP überhaupt bedienen zu können.