emetiel: Was passiert mit Skripten bei Abbruch des Seitenaufbau?

Hi,

Es ja durchaus user geben, die nicht warten können / wollen / dürfen und eine Seite schon beim Aufbau bzw. im ladenden Zustand wieder schließen. Hierauf bezieht sich meine Fragen.

Gegeben:
Ich habe das Glück, eine Webanwendung, welche unter ASP2.0 realisiert wurde, aufs Auge gedrückt bekommen zu haben und darf diese jetzt weiter pflegen. Die einzelnen Seiten greifen dabei jeweils auf eine Datenbank lesend und auch schreibend zu.

Hard und Software:
Windows Server 2008 SP1
MS Sql-Server 2005
IIS 7
ASP 2.0

Bei allen Seiten werden zu Beginn eine menge Variablen deklariert. Diese werden während des Ladevorgangs alle aus der Datenbank befüllt. Dazu wird unmittelbar vor Zuweisung die Datenbankverbindung erstellt und danach gleich wieder beendet.

Nebenfrage:
Irgendjemand hat am Ende aller ASP Seiten ein "set VariableXYZ = Nothing" für alle auf den Seiten verwendeten Variablen eingebaut. Seine Begründung hierfür war: Wenn die Variablen nicht "zerstört" ( ??? ) werden leben sie eben bis die Session ungültig, default nach 20 Minuten, wird ( Stimmt das so ??? )

Meine eigentliche Fragen:
Wenn dem so ist, was passiert dann wenn ich jetzt wie gesagt ein böser und ungeduldiger Anwender bin, der erst garnicht wartet bis die Seite fertig ist.

Existieren dann alle bis zum Abbruch deklarierten und evtl. bereits gefüllte  Variablen irgendwo im Speicher bis die Session ungültig wird?

Bleibt eine bei Abbruch geöffnete DB Verbindung offen bis die Session ungültig wird bzw. die DB die Session selber killt?

Wer verwaltet die Skripte? Der IIS oder das BS?

Kann mir jemand Literatur empfehlen bei welcher ich solche Dinge nachlesen kann?

thx und gruß
emetiel

  1. Irgendjemand hat am Ende aller ASP Seiten ein "set VariableXYZ = Nothing" für alle auf den Seiten verwendeten Variablen eingebaut. Seine Begründung hierfür war: Wenn die Variablen nicht "zerstört" ( ??? ) werden leben sie eben bis die Session ungültig, default nach 20 Minuten, wird ( Stimmt das so ??? )

    "Normale Variablen" ohne spezielle  haben keine Gültigkeit über die Laufzeit des Scriptes hinaus.

    Meine eigentliche Fragen:
    Wenn dem so ist, was passiert dann wenn ich jetzt wie gesagt ein böser und ungeduldiger Anwender bin, der erst garnicht wartet bis die Seite fertig ist.

    Das Script läuft weiter nachdem der Server davon nichts mitbekommt.

    Existieren dann alle bis zum Abbruch deklarierten und evtl. bereits gefüllte  Variablen irgendwo im Speicher bis die Session ungültig wird?

    Nein, nur die Session-Variablen.

    Bleibt eine bei Abbruch geöffnete DB Verbindung offen bis die Session ungültig wird bzw. die DB die Session selber killt?

    Nein, bis die Verbindung explizit (oder implizit beendet wird). Wenn dein Script eine Datenbankverbindung öffent aber niemals beendet, hilft es auch nicht wenn der Benutzer brav bis zum "Ende" wartet - sie bleibt offen, bis sie das DBMS beendet.

    Wer verwaltet die Skripte? Der IIS oder das BS?

    Der IIS oder das .NET-Framework.

    1. Irgendjemand hat am Ende aller ASP Seiten ein "set VariableXYZ = Nothing" für alle auf den Seiten verwendeten Variablen eingebaut. Seine Begründung hierfür war: Wenn die Variablen nicht "zerstört" ( ??? ) werden leben sie eben bis die Session ungültig, default nach 20 Minuten, wird ( Stimmt das so ??? )

      "Normale Variablen" ohne spezielle  haben keine Gültigkeit über die Laufzeit des Scriptes hinaus.

      Nachdem es sich hier um ASP.NET handelt, bei dem oft alle clientseitigen Aktionen über JavaScript abgewickelt und weiterverarbeitet werden (jeder Klick auf einen Link, Form bestätigen usw.) halte ich es durchaus für möglich dass lokale Variablen an den Server geschickt werden und dann im ViewState landen.
      Und damit für den Rest der Session existieren.

      --
      for your security, this text has been encrypted by ROT13 twice.
      1. Hi!

        Irgendjemand hat am Ende aller ASP Seiten ein "set VariableXYZ = Nothing" für alle auf den Seiten verwendeten Variablen eingebaut.
        Nachdem es sich hier um ASP.NET handelt,

        Nach meinen Informationen gibt es "Set" nicht zum Anlegen einfacher Variablen unter Visual Basic für .NET. Dort wird dieses Schlüsselwort nur im Zusammenhang mit Set-Methoden für Propertys verwendet. Demzufolge dürfte es sich noch um das alte ASP ohne .NET handeln, denn da war das Zuweisen von Werten zu Variablen mit Set noch üblich.

        Lo!

        1. Nach meinen Informationen gibt es "Set" nicht zum Anlegen einfacher Variablen unter Visual Basic für .NET. Dort wird dieses Schlüsselwort nur im Zusammenhang mit Set-Methoden für Propertys verwendet. Demzufolge dürfte es sich noch um das alte ASP ohne .NET handeln, denn da war das Zuweisen von Werten zu Variablen mit Set noch üblich.

          Ups, hab ich überlesen, sorry.

          --
          for your security, this text has been encrypted by ROT13 twice.
    2. Hi,

      erst mal danke für die schnelle Antwort, aber leider habe ich jetzt noch mehr Fragen

      Das Script läuft weiter nachdem der Server davon nichts mitbekommt.

      Kann man irgendwie prüfen, ob es solche, ich nenne sie mal ungültige, Scripte gibt?

      Nein, nur die Session-Variablen.

      Gleiche Frage wie oben nur auf Session-Variable bezogen

      Gibt es eine Möglichkeit, beides zu bereinigen ohne dabei auf den Ablauf der Gültigkeit der Session zu warten?

      Bleibt eine bei Abbruch geöffnete DB Verbindung offen bis die Session
      ungültig wird bzw. die DB die Session selber killt?
      Nein, bis die Verbindung explizit (oder implizit beendet wird). Wenn dein
      Script eine Datenbankverbindung öffent aber niemals beendet, hilft es
      auch nicht wenn der Benutzer brav bis zum "Ende" wartet - sie bleibt
      offen, bis sie das DBMS beendet.

      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?

      Wer verwaltet die Skripte? Der IIS oder das BS?
      Der IIS oder das .NET-Framework.

      Bekommt der IIS oder das .Net-Framework mit, wenn ich als user solch böse Dinge wie Abbruch und so treibe?

      1. 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.

        1. Hi!

          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.

          Meines Erachtens könnte er das bis zu einem gewissen Maß. HTTP ist ja ein TCP-Protokoll, also verbindungsorientiert, und wenn der Client die Verbindung abbricht, dann bekommt der Server das ja auch mit. Wenn allerdings die Netzwerkverbindung ausfällt dauert das noch bis der Webserver einen Timeout feststellt.

          Jedenfalls kennt ASP.NET ein IsClientConnected, das zur HttpResponse-Klasse gehört.

          Lo!

  2. 1. Ich habe keine Ahnung was ASP ist. (Und für die, die es mir erklären wollen oder mir die Benutzung einer Suchmaschine nahelegen wollen, ich will es persönlich nicht wissen und ich habe nicht vor mich für die Beantwortung der Frage damit zu beschäftigen.)

    Existieren dann alle bis zum Abbruch deklarierten und evtl. bereits gefüllte  Variablen irgendwo im Speicher bis die Session ungültig wird?

    2. Nein nicht irgendwo. Falls das script abgebrochen wird sind die Variablen des scripts weg, die der Session bleiben erhalten.

    Kann mir jemand Literatur empfehlen bei welcher ich solche Dinge nachlesen kann?

    Nicht direkt, aber wenn Du nicht weißt, ob das script abgebrochen wird, dann lege fest was passieren soll.
    http://de.php.net/manual/de/function.ignore-user-abort.php
    http://de.php.net/manual/de/function.connection-aborted.php

    Mit Letzterem kannst du auch diagnostizieren, ob das script abgebrochen wird.
    ein sleep ans ende des scriptes und noch dahinter eine Ausgabe, falls der Nutzer die Verbindung abgebrochen hat. Wobei man sich dadurch nicht sicher sein kann, ob die nie abgebrochen wird, nur weil man es nie feststellen konnte.

    1. Oh - ich hatte den Themenbereich des darunterliegenden Threads gelesen, der lautete PHP.

      1. Oh - ich hatte den Themenbereich des darunterliegenden Threads gelesen, der lautete PHP.

        Ich gehe davon aus, dass du in diesem Kontext dann schon weißt, was ASP ist - ansonsten finde ich das bei deinem sonst sehr guten Fachwissen sehr traurig.

        1. Oh - ich hatte den Themenbereich des darunterliegenden Threads gelesen, der lautete PHP.

          Ich gehe davon aus, dass du in diesem Kontext dann schon weißt, was ASP ist - ansonsten finde ich das bei deinem sonst sehr guten Fachwissen sehr traurig.

          Das ist nicht auszuschließen, in kenne viel und beherrsche einiges von dem ich nicht weiß wie es heißt.

          1. Na toll, jetzt habe ich doch nach-(ASP Konzept)-geschaut.

            Ein Artikel unter der Überschrift "was ist asp" hat mir keinen Eindruck vermittelt was es eigentlich ist (oder was es von dem was ich kenne sein könnte) nur marketingartiges Gefasel. Ein anderer Artikel meint, daß 8 von 10 ITlern davon nichts wissen, sagt aber nicht was es ist.

            Dann habe ich doch noch was gefunden nachdem ich die Suche um .NET erweitert habe. Was ich nicht verstehe und was mich kaum wirklich aber doch mehr als ASP interessiert, warum es jemand traurig finden könnte, wenn man davon nichts weiß oder wissen möchte obwohl man irgendwelche Fachkenntnisse hat? Ich verdiene kein Geld mit (der Erstellung von) Webanwendungen* oder ähnlichem und habe nicht vor das in Zukunft zu tun. Für meinen privaten Kram reicht mir _eine_ Programmiersprache (wie php) aus.

            *Von Mini-scripten für Mini-Anwenderkreise abgesehen.

            PS.: Jetzt fällt mir auch ein, daß ich schon auf Seiten war die auf .asp enden.

            1. Ein Artikel unter der Überschrift "was ist asp" hat mir keinen Eindruck vermittelt was es eigentlich ist (oder was es von dem was ich kenne sein könnte) nur marketingartiges Gefasel. Ein anderer Artikel meint, daß 8 von 10 ITlern davon nichts wissen, sagt aber nicht was es ist.

              http://de.wikipedia.org/wiki/Active_Server_Pages

              Da steht in ein paar Sätzen was es zu wissen gibt - wenn du nicht damit zu tun hast, ist zumindest deine Allgemeinbildung gefestigt.

              PS.: Jetzt fällt mir auch ein, daß ich schon auf Seiten war die auf .asp enden.

              Klick :)

              1. http://de.wikipedia.org/wiki/Active_Server_Pages

                Da steht in ein paar Sätzen was es zu wissen gibt - wenn du nicht damit zu tun hast, ist zumindest deine Allgemeinbildung gefestigt.

                Das hatte ich gelesen, vom ASP.NET-Artikel kommend.

  3. Was ist, wenn das ganze nicht .NET ist? also nur ASP? Oder gibt es ASP nicht als nicht .NET?

    1. Was ist, wenn das ganze nicht .NET ist? also nur ASP? Oder gibt es ASP nicht als nicht .NET?

      ASP ist nur ein Konzept - ab Version 2.0 wird .NET als interpreter verwandt, zuvor war das ganze irgendwie weitestgehend im IIS Built-In und hat sich afaik Teile von WScript und CScript ausgeborgt.

      Die Logik bei einem Webserver ist aber im Prinzip dieselbe.