Laden...

aktionen beim schließen der website

Erstellt von felifell vor 15 Jahren Letzter Beitrag vor 15 Jahren 9.347 Views
F
felifell Themenstarter:in
36 Beiträge seit 2008
vor 15 Jahren
aktionen beim schließen der website

huhu ich bins wieder 😉

gibt es eine möglichkeit, eine prozedur ?, mit der man beim schließen einer website z.b. die db connection schließen, oder ein cooki ungültig machen kann?

vielen dank schoneinmal im vorraus

5.942 Beiträge seit 2005
vor 15 Jahren

Hallo felifell

Serverseitig hast du überhaupt keine Möglichkeit, zumindest keine direkte.

  1. Benutzt du Javascript, um per Seitenneuladen den Server zu benachrichtigen, das wer gehen möchte
  2. Du hoffst darauf, dass sich der Benutzer "Ausloggt", und kannst das dann so festhalten

Oder aber du benutzt das Event Session_End, um jede beendete Session abzufangen (Beachte Timeout).

Rein clientseitig gibts folgendes Event:

Zu deinen unter Sätzen:
HTTP ist statuslos, d.h. bis auf eine koordinierte Identifizierung anhand von (temporären oder nicht) Cookies, kannst du den Benutzter nicht identifizieren und auch keine Verbindung so aufrechterhalten.

Darum sollte man die Datenbank Verbindung, sowie auch andere Ressourcen, bspw. Textdateien, etc.. jeweils nach der Beendigung eines Requestes schliessen.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

4.207 Beiträge seit 2003
vor 15 Jahren

Deswegen ja mein Hinweis in dem anderen Thread, das ganze in eine Basisklasse zu packen 😉.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

5.942 Beiträge seit 2005
vor 15 Jahren

Hallo Golo

Deswegen ja mein Hinweis in dem anderen Thread, das ganze in eine Basisklasse zu packen 😉.

Für was jetzt konkret? 🙂

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

4.207 Beiträge seit 2003
vor 15 Jahren

Das Öffnen und Schließen der DB-Verbindung, damit das bei jeder Seite implizit geschieht 😉

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

5.942 Beiträge seit 2005
vor 15 Jahren

Hallo Golo

Das Öffnen und Schließen der DB-Verbindung, damit das bei jeder Seite implizit geschieht 😉

Ja, das dacht ich mir schon 🙂
Ich finde es allerdings besser, die Datenbankverbindung im HttpContext zu hehalten und über den ganzen Request hinweg Verbindung zu haben.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

J
537 Beiträge seit 2007
vor 15 Jahren

Hoi Peter,

Ich finde es allerdings besser, die Datenbankverbindung im HttpContext zu hehalten und über den ganzen Request hinweg Verbindung zu haben. meinst du über den ganzen Request hinweg oder requestübergreifend? Letzteres wäre ja nur über ein globales statisches Objekt machbar und aus meiner Sicht nicht zu empfehlen.

Du hattest mal was erwähnt, wo du eine Connection im HttpContext allen HttpHandlern (auch Page) zur Verfügung stellst. Nutzt du dabei die Events "Application_BeginRequest" und "Application_EndRequest" in der Global.asax?

(Evtl. wäre das Thema ein Blogpost wert... 😉 )

5.942 Beiträge seit 2005
vor 15 Jahren

Hallo Jürgen

meinst du über den ganzen Request hinweg oder requestübergreifend? Letzteres wäre ja nur über ein globales statisches Objekt machbar und aus meiner Sicht nicht zu empfehlen.

Über einen ganzen Request hinweg.
Requestübergreifend ist - wie du gesagt hast - nicht zu empfehlen.

Du hattest mal was erwähnt, wo du eine Connection im HttpContext allen HttpHandlern (auch Page) zur verfügung stellst. Nutzt du dabei die Events "Application_BeginRequest" und
"Application_EndRequest" in der Global.asax?

Ja. Ginge natürlich auch mit einem HttpModule, aber die Global.asax reicht dafür.
Siehe mein Post in den NGs:

Zitat:

> nur falls das falsch rübergekommen sein sollte. IIS 5, 5.1 und 6 zeigen
> dieses Verhalten nicht. IIS 7 unter Vista ohne SP 1 auch nicht. Peter
> Bucher meinte, mit SP 1 (was ja dazu führt, dass Vista eigentlich eine
> abgespeckte WS2008 Version ist^^) würde das Verhalten auftreten.

Kann ich hier nochmals bestätigen, vollkommen korrekt.

Das ist das Standardverhalten der Webserver.
Dieses kann aber umkonfiguriert werden, je nach dem wie das Verhalten
gewünscht ist.

Um bspw. die Connection nur dann zu öffnen, wenn wirklich eine Seite oder
ein eigener Handler den Request
annimmt und bearbteitet, kann man das zusätzlich prüfen. (So fährt man in
jedem Fall sicher).

Einfache Variante:
Dateiendung des eingegagenen Requests prüfen, bspw:
if(datei.EndsWith(".aspx") ......

Saubere Variante:
Auf den Typ des Handlers Prüfen.
Bspw. wenn nur Seiten DB Connection brauchen:

object handler = (sender as HttpApplication).Context.CurrentHandler;
if(handler != null && handler is Page) {
// DB öffnen und zuweisen

}

Und um eigene Handler auch einzuschliessen, ist die IMO einfachste und beste
Variante,
diese mit einem Marker Interface zu markieren.

Bspw. so:

[Interface]
public interface IRequiresDb {}

[Handler]
public class MeinHandlerDerDbBrauch : IHttpHandler, IRequiresDb {}

if(handler != null && (handler is Page) || handler is IRequiresDb) { ....

HTH

(Evtl. wäre das Thema ein Blogpost wert... 😉 )

Stimmt 🙂

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

J
537 Beiträge seit 2007
vor 15 Jahren

Hoi Peter,

alles klar, danke 🙂