2010-04-19 31 views
0

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

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

我觉得应该有这种类型的问题的设计模式,但一直没有能够找到任何东西在这里或网络上的其他地方。

途径我考虑:

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

  2. 尝试监视会话信息并维护一个列出登录用户并在一段时间后超时的表。

  3. 其他一些更标准的方法呢?

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

谢谢!

+0

你在用什么框架? – 2010-04-19 21:55:25

+0

Yii ............ – 2010-04-20 02:24:08

+0

在Yii缓存:http://www.yiiframework.com/doc/guide/caching.overview – 2010-04-20 17:45:14

回答

1

如果你用组件或模块而不是表格来思考它,你会有更多的运气保持它。我看到它的方式,你需要以下接口。

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

您可以实现这些使用一个数据库,但为什么不使用你选择的web框架的内置缓存?

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

0

我认为#1是适合您的问题的适当解决方案,我想也是常见的解决方案。它可以让你决定你认为用户“活跃”的HTTP请求(即决定何时和是否更新“最后活动”表)和/或分类活动(具有更多“最后XXX活动”列和更新每个他们在用户执行不同的操作后)。