Luna: ASP im JavaScript-Block?

Hi!

ich habe folgendes in meinem Script:

<script for=window event=onunload language=javascript>
document.write("<%session.abandon%>");
</SCRIPT>

Aber die Session wird nicht gekillt. Liegt das an der Schreibweise?
Warum wird session.abandon ignoriert? Müsste doch eigentlich klappen..

Danke
Luna

  1. Halihallo

    <script for=window event=onunload language=javascript>
    document.write("<%session.abandon%>");
    </SCRIPT>

    Aber die Session wird nicht gekillt. Liegt das an der Schreibweise?
    Warum wird session.abandon ignoriert? Müsste doch eigentlich klappen..

    Tut es auch, wenn alles stimmt. Wird dein JavaScript auch tatsächlich aufgerufen? - Wird ein anderer ASP Code interpretiert (testen mit response.Write).

    <script for=window event=onunload language=javascript>
       alert("Session wird beendet");
       <%session.abandon%>
    </SCRIPT>

    versuchs mal damit. Erscheint die Dialogbox überhaupt??? - Sonst hast du kein ASP Problem, sondern ein JavaScript Problem.

    Hoffe, dass das was hilft

    Philipp

    1. Hi Philipp,

      Wird dein JavaScript auch tatsächlich aufgerufen? - Wird ein anderer ASP Code interpretiert (testen mit response.Write).

      Response.write wird nicht ausgeführt, weil die Seite verlassen wird.
      Alert klappt problemlos.

      Mit:

      <script for=window event=onunload language=javascript>
         alert("Session wird beendet");
         <%session.abandon%>
      </SCRIPT>

      geht wird die Session auch nicht gekillt.
      Was passieren soll ist, dass die Session stirbt, wenn das Browserfenster geschlossen wird. Wahrscheinlich greift dann <%session.abandon%> nicht mehr, weil das Fenster schon zu ist, oder? Ich habe das mal mit <%Response.Cookies("test") = "testcookie"%>
      und so versuct: kein Problem, der Cookie wird gesetzt. Es ist also
      auch kein ASP-Problem.

      Das ist mir sehr schleierhaft..

      Danke
      Luna

      1. Hallo,

        das wird auch so nicht funktionieren.

        JavaScript läuft beim Client - ASP auf dem Server. Der Server bekommt ja garnicht mit, daß das Timeout des JavaScripts errreicht wurde. Im Gegenzug erkennt das JavaScript zwar das Timeout, kann aber nicht den Server erreichen, da zwischen Client und Server zu diesem Zeitpunkzt überhaupt keine Verbindung besteht. Das widerspricht HTTP- da eben verbindungslos.

        Also mußt Du einen Weg finden, wie das JavaScript wieder eine Verbindung zum Server hestellt und dieser dann die Session beenden kann.

        Eine Idee wäre in dieser Datei ein Formular einzuarbeiten, welches  nur dann gesendet wird, wenn das JavaScript eben seinen Timeout erreicht. Nachdem Du dann das Formular mit einem Request auf dem Server abgearbeitet hast, kann dieser die Session beenden.

        cu
        uDas .-)

      2. Halihallo

        Sorry für die verspätete Antwort:

        Response.write wird nicht ausgeführt, weil die Seite verlassen wird.

        Ups, ist ja logisch, mein Fehler.

        Alert klappt problemlos.

        Gut, dann wissen wir wenigstens, dass es mit dem JS gut funktioniert.

        Mit:

        <script for=window event=onunload language=javascript>
           alert("Session wird beendet");
           <%session.abandon%>
        </SCRIPT>

        Was passieren soll ist, dass die Session stirbt, wenn das Browserfenster geschlossen wird. Wahrscheinlich greift dann <%session.abandon%> nicht mehr, weil das Fenster schon zu ist, oder? Ich habe das mal mit <%Response.Cookies("test") = "testcookie"%>
        und so versuct: kein Problem, der Cookie wird gesetzt. Es ist also
        auch kein ASP-Problem.

        Also, die <% ... %> - Direktiven werden bereits beim _Aufruf_ der Seite interpretiert, also auch der Code innerhalb von <script> [...] </script>. Theoretisch sollte die Session bereits beendet sein, wenn er (der Webserver) die Seite an den Client sendet. Sobald die Seite also _aufgerufen_ wird, wird die Session beendet, nicht beim schliessen des Fensters.

        <%Response.Cookies("test") = "testcookie"%>

        Ja, das sollte schon funktionieren, hat ja auch wenig mit dem Session-Objekt zu tun. Das einzige was diese Methode macht, ist :

        Set-Cookie: ... in den HTTP-Header schreiben.

        Lösungsvorschlag:

        Wenn der Client das Fenster schliesst, musst du eine kleine ASP Seite in einen unsichtbaren Frame (o. ä.) laden, welches die Session killt. Ansonsten kriegst du Probleme, da du die Methode Session.abandon nicht in einer Seite Clientseitig beeinflussen kannst.
        Also irgendetwas in der Form:

        <script for=window event=onunload language=javascript>
          alert("Session wird beendet");
          var invisible_frame = window.open('close_session.asp', '<invisible_frame_name>', '');
        </script>

        oder mit location.href, um die Ausgabe von close_session.asp in die aktuelle Seite einzufügen, dann kannst du dich noch verabschieden ;-)

        ---- close_session.asp ----
           <html>
              <% Session.abandon %>
              <script>
                 alert('OK. Session gekillt');
              </script>
           </html>
        ---- /close_session.asp ----

        Viele Grüsse und viel Glück

        Philipp