【问题标题】:Track user activity/actions for an asp.net mvc website?跟踪 asp.net mvc 网站的用户活动/操作?
【发布时间】:2017-07-08 16:57:18
【问题描述】:

我想为我的 Web 应用程序的所有用户记录每个页面视图。经过足够的时间后,我将使用该日志生成报告。我希望日志记录机制有点灵活,因为我不需要记录每个 http 请求。

一个示例用例是:一家公司注册了我的网络应用程序并允许 5 名员工使用该应用程序。我想报告上周有 3 名员工使用了该应用程序。或显示有 4 名员工在当年的 6 月至 8 月期间使用它。

我正在使用带有 sql server 的 asp.net mvc,如果这会有所不同的话。

就这么简单吗?创建一个包含以下列的 sql 表:UserId、ControllerName、ActionName、ActionParameters、CreatedOn。然后创建一个 ActionFilterAttribute,为调用的每个操作向数据库添加一条记录。

是否有任何我应该担心的陷阱(除了可能很大的表大小)?

【问题讨论】:

  • 也许一个更具扩展性的解决方案是使用 Google Analytics 并跟踪我可以解析的“虚拟网址”。像 /reports////。之后,使用他们的数据提要 api 并解析响应
  • 不安全,用户可以关闭JS或者屏蔽GA。

标签: c# asp.net-mvc


【解决方案1】:

一些陷阱:

  1. 您将无法进行任何服务器级页面缓存。
  2. 大量数据库写入,因为您实际上记录了每个请求。
  3. 如果页面上发生了任何操作,您可能会存储冗余信息。

我假设您将在某种类型的自定义 AuthorizeAttribute 中实现此功能,因此您无需在每个控制器上对其进行编码,但实际上每个请求都可能超出您的实际需要。

您是否考虑过使用某种类型的 IIS 日志解析实用程序?它已经包含很多您需要的信息。

【讨论】:

    【解决方案2】:

    如果您愿意使用 JavaScript,另一个选择是您可以按照 SiteCatalyst 的方式实现一些东西。您在页面加载时使用 JavaScript 从客户端向控制器操作发送请求,并在 url 中包含适当的信息。例如:

    www.example.com\AnalyticsController\Action\currentController\currentAction\userName

    优点是您的日志记录不会与所有其他操作按顺序执行,您可以通过将 AJAX 调用放在母版页中来使其正常工作。

    缺点是它使用 JavaScript,正如指出的那样,它可以被禁用。它也很容易被欺骗。

    【讨论】:

      【解决方案3】:

      看看 IActionFilter 接口 - 您可以编写自己的类来实现它,并记录您需要的任何内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-21
        • 2013-10-23
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多