1

问题陈述- 想知道特定 Web 应用程序用户是否处于活动状态(即登录并使用站点)并能够查询活动用户列表或确定用户的活动状态。

约束- 不需要精确(即如果用户在特定时间范围内处于活动状态,即使他们关闭了浏览器也可以说他们处于活动状态)。

我觉得应该有针对此类问题的设计模式,但无法在此处或网络上的其他地方找到任何东西。

我正在考虑的方法:

  1. 维护一个在用户执行操作(或操作的某些子集)时更新的表。然后将查询在某个时间阈值内执行了操作的用户。

  2. 尝试监控会话信息并维护一个表,其中列出了登录用户和一段时间后的超时时间。

  3. 其他一些更标准的方式来做到这一点?

您将如何解决这个问题(同样,从设计模式的角度来看)?

谢谢!

4

2 回答 2

1

如果您根据组件或模块而不是表格来考虑它,那么您将有更多的运气来维护它。在我看来,您需要以下接口。

public interface IActiveUsers {
  bool IsUserActive(User u);
}
public interface ITrackActiveUsers {
  void MarkUserAsActive(User u);
}

您可以使用数据库来实现这些,但为什么不直接使用您选择的 Web 框架的内置缓存呢?

基本上,当将用户标记为活动时,使用“LoggedInUser-1234”之类的键将键插入缓存,其中 1234 是用户的一些唯一标识符。然后只需将超时设置为您想要的任何时间(5 分钟、10 等)并将值设置为 true。然后,在查询用户是否处于活动状态时,只需检查缓存是否包含同一键的真值。

于 2010-04-19T21:29:28.753 回答
0

我认为#1 足以解决您的问题,我想也是常见的一个。它可以让您决定您认为用户“处于活动状态”的 HTTP 请求(即决定何时以及是否更新“最后活动”表)和/或对活动进行分类(具有更多“最后 XXX 活动”列并更新每个他们在用户执行不同的操作后)。

于 2010-04-19T20:22:31.167 回答