2009-10-03 10 views
7

Me gustaría mantener un registro de cada vista de página para todos los usuarios de mi aplicación web. Cuando haya transcurrido el tiempo suficiente, usaré ese registro para generar informes. Me gustaría que el mecanismo de registro sea un poco flexible ya que no necesitaría registrar cada solicitud HTTP.¿Seguir la actividad/acciones del usuario para un sitio web asp.net mvc?

Un ejemplo de caso de uso es: una empresa se registra en mi aplicación web y permite que 5 empleados utilicen la aplicación. Me gustaría informar que 3 empleados usaron la aplicación en la última semana. O muestre que 4 empleados lo usaron entre junio y agosto del año en curso.

Estoy usando asp.net mvc con servidor sql, si eso hace la diferencia.

¿Es así de simple? Cree una tabla sql con las siguientes columnas: UserId, ControllerName, ActionName, ActionParameters, CreatedOn. Luego, cree un ActionFilterAttribute que agregue un registro al db para cada acción invocada.

¿Hay algún problema por el que deba preocuparme (aparte de un tamaño de mesa potencialmente grande)?

+2

Quizás una solución más escalable sea usar Google Analytics y rastrear "URL virtuales" que pueda analizar. Me gusta/informes////. Después de eso, use su api de alimentación de datos y analice la respuesta –

+1

No segura y los usuarios pueden apagar JS o bloquear GA. – queen3

Respuesta

6

algunas de las trampas:

  1. Usted no será capaz de hacer cualquier almacenamiento en caché de la página nivel de servidor.
  2. Un montón de db escribe ya que está en efecto registrando cada solicitud.
  3. Si hay acciones que suceden en las páginas, podría estar almacenando información de redundancia.

Supongo que implementará esto en algún tipo de autorizarAttribute personalizado para que no lo codifique en cada controlador, pero entonces será literalmente cada solicitud que posiblemente sea más de lo que realmente necesita.

¿Ha considerado usar algún tipo de utilidad de análisis de registro IIS? Tendría mucha información que necesita ya.

0

Eche un vistazo a la interfaz IActionFilter: puede escribir su propia clase que implemente esto y registrar lo que necesite.

2

Otra opción si está dispuesto a usar JavaScript es que podría implementar algo similar a SiteCatalyst. Envía una solicitud utilizando JavaScript desde el cliente en la carga de la página a una acción del controlador con la información adecuada en la url. por ejemplo:

www.example.com \ AnalyticsController \ Acción \ currentController \ currentAction \ nombre de usuario

La ventaja es que su registro no se ejecuta en secuencia con todas sus otras operaciones y es probable que pueda hacerlo funcionar poniendo la llamada AJAX en la página maestra.

El inconveniente es que usa JavaScript, que como se señaló podría estar deshabilitado. También sería muy fácil burlarse.

Cuestiones relacionadas