2010-12-02 11 views

Antwort

4

Client-Seite Skript:

< body onbeforeunload="window.open('http://www.website.com/browserclosed.aspx','mywindow','width=1,height=1');"> 

serverseitige Skript (browserclosed.aspx):

// page_load 

int userId = Convert.ToInt32(request.session("userId")); 
ReportBrowserClosed(userId); 
// Do what you want in ReportBrowserclosed() method 
9

Kurze Antwort: Sie können das nicht direkt tun, da http staatenlos ist. Vielleicht können Sie ein AJAX-heartbeat-Pooling, eine Session-Timeout-Erkennung und andere Tricks verwenden.

Werfen Sie einen Blick auf this question für weitere Erklärungen und Ideen. Dies basiert auf Java, aber Ideen sind sprachunabhängig.

0

Die erste Sache, die in den Sinn kommt, ist, dass Sie das Entladen Ereignis haken und nur asynchron zurück, dass der Browser von Ihrer Website navigiert (geschlossen das Fenster). Die Art und Weise, wie HTTP zum Erstellen zustandsloser Websites verwendet wird, macht dies jedoch unmöglich. Sie haben einfach keine zuverlässige Möglichkeit, die Benutzerkonnektivität zu verfolgen.

Denken Sie nur darüber nach, wie Sie mehrere Sitzungen behandeln würden? Wenn ich die gleiche Seite in vielen, mehreren Tabs oder Fenstern geöffnet habe und alle bis auf eine schließen, wie verstehst du, dass ich immer noch verbunden bin? Und zum Spaß, sagen Sie, dass mein Browser irgendwo dazwischen abgestürzt ist.

Die Sache ist, ich könnte etwas entwerfen, das Ihr Problem lösen würde. Es wird jedoch nie zuverlässig sein, da HTTP keinen integrierten Kontrollmechanismus für die Konnektivität hat.

Ich muss diese Frage mit einer Anschlussfrage beantworten. Warum müssen Sie wissen, wann das Browserfenster geschlossen wird?

Wenn Sie einige Ressourcen bereinigen müssen, gibt es zwei serverseitige Ereignisse, erleichtert durch ASP.NET, die Sie zuverlässiger verwenden könnten. Und das ist Session_End oder Application_End.

+0

ich für die OP nicht beantworten kann, aber ein gemeinsamer Grund, dies zu tun, ist ein zu stoppen lang andauernde Operation (Abfrage, Berichterstellung usw.), wenn der Benutzer aufgibt und seinen Browser schließt. – Gabe

0

Die ziemlich offensichtliche Frage ist, warum brauchen Sie das? Möchten Sie Abmeldezeit oder Schließzeit speichern? Dann ist es besser, in Session-Timeout zu fangen. Möchten Sie eine andere Seite umleiten, dann ist es besser, in der Seite das Ereignis javascript auszulesen.

Verwandte Themen