Philipp Hasenfratz: ASP im JavaScript-Block?

Beitrag lesen

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