2010-12-02 71 views

Respuesta

4

script del lado del cliente:

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

script del lado del servidor (browserclosed.aspx):

// page_load 

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

Respuesta corta: no puede hacer eso directamente porque http es sin estado. Tal vez puedas usar un poco de agrupamiento de audios AJAX, detección de tiempo de espera de la sesión y otros trucos.

Eche un vistazo a this question para obtener más explicaciones e ideas. Esto está basado en Java, pero las ideas son independientes del idioma.

0

Lo primero que se le viene a la mente es que engancha el evento de descarga y solo publica de manera asíncrona que el navegador navegó fuera de su sitio (cerró la ventana). Sin embargo, la forma en que HTTP se usa para crear sitios web sin estado hace que esto no sea factible. Simplemente no tiene una forma confiable de rastrear la conectividad del usuario.

Simplemente considere cómo manejaría varias sesiones? Si tengo el mismo sitio abierto en muchas y varias pestañas o ventanas y cierro todos menos uno, ¿cómo dice que todavía estoy conectado? Y por el gusto de hacerlo, di que mi navegador se colgó en algún punto intermedio.

El problema es que podría diseñar algo que pudiera resolver su problema. Sin embargo, nunca va a ser confiable porque HTTP no tiene un mecanismo de control incorporado para la conectividad.

Tengo que responder a esta pregunta, con una pregunta de seguimiento. ¿Por qué necesita saber cuándo se cierra la ventana del navegador?

Si necesita hacer alguna limpieza de recursos hay dos eventos del lado del servidor, facilitados por ASP.NET que puede usar de manera más confiable. Y eso es Session_End o Application_End.

+0

No puedo responder por el PO, pero una razón común de hacer esto es dejar una operación de larga ejecución (consulta, generación de informes, etc.) cuando el usuario abandona y cierra su navegador. – Gabe

0

La pregunta bastante obvia es ¿por qué lo necesitas? ¿Desea almacenar el tiempo de cierre de sesión o la hora de cierre? Entonces es mejor atrapar el tiempo de espera de la sesión. ¿Quieres redirigir a otra página, entonces es mejor atrapar en el evento de descarga de página de javascript.

Cuestiones relacionadas