获取所有登录用户Web2py

时间:2012-08-31 16:07:51

标签: web2py

是否有快速简单的方法来获取当前登录到web2py应用程序的所有用户? 我想向该页面的管理员显示目前有多少非管理员用户登录。 感谢..

1 个答案:

答案 0 :(得分:9)

注意,“当前登录”并不是一个明确定义的概念。您可以登录,但随后离开计算机或关闭浏览器。在那种情况下,你还登录吗?您可能不应该被视为已登录,但服务器并不知道您已离开或关闭浏览器。 Auth系统会在auth_events表中记录登录和注销事件,因此一个选项是查找在定义的时间段内登录但未明确注销的所有用户。请注意,这可能会夸大登录用户的数量,因为有些用户可能在没有明确注销的情况下离开了您的网站。这是一些代码:

import datetime
limit = request.now - datetime.timedelta(minutes=30)
query = db.auth_event.time_stamp > limit
query &= db.auth_event.description.contains('Logged-')
events = db(query).select(db.auth_event.user_id, db.auth_event.description,
    orderby=db.auth_event.user_id|db.auth_event.time_stamp)
users = []
for i in range(len(events)):
    last_event = ((i == len(events) - 1) or
                   events[i+1].user_id != events[i].user_id)
    if last_event and 'Logged-in' in events[i].description:
        users.append(events[i].user_id)
logged_in_users = db(db.auth_user.id.belongs(users)).select()

以上为您提供了在过去30分钟内登录但未明确注销的所有用户。

更复杂的方法将涉及跟踪已登录用户的请求以确定谁正在使用该应用程序。您可以缓存一个字典,该字典存储每个登录用户的最新请求的时间戳。请求报告时,向用户显示最近时间段内的时间戳(并清除具有较旧时间戳的用户以防止缓存过大)。

另一种选择是检查会话文件。确定在一段时间内修改过的会话。其中,找到包含“auth”对象的对象,并检查auth.last_visit的最后一次请求的时间(实际上,如果自上一次访问以来的时间超过auth.settings的1/10,则auth.last_visit仅更新.expiration time,默认为3600秒。)

相关问题