需要显示最近在线过的用户,需要记录用户最近登录时间,但是对于保存密码的用户来说不用登录,如何记录这个最近访问呢?有没有什么简单的办法?目前是在before_request记录,但是发现太浪费资源。也就是需要知道第一次访问改网站和退出该网站?
若对用户活动比较关注, 即希望取得比较准确的用户活动的时间, 建议还是用before_request
来做.
若只是想获取用户在某个时间段内首次登录的时间(用户最近登录时间), 则可以考虑用其他方法. 假设你是使用Flask-Login做登录, 在比较新的版本中, 存在一个user_accessed
信号, 这个信号在用户登录或者从COOKIE加载已保存的用户信息时发送, 通过对这个信号进行监听, 就可以实现最近登录的功能.
下面是简单的示例代码:
from flask.ext.login import user_accessed
@user_accessed.connect_via(app)
def when_user_accessed(sender, **extra):
user_id = session.get('user_id')
# 下面可以开始自己的操作流程了, 需要对 user_id 进行判断
# 首次发送时, user_id 可能为空
退出网站是比较难监控的.
用户一段时间内不用输入密码,即访问页面时通过提交的Cookie
进行了自动登录。
此时我们的程序应该会把该用户的信息添加到session
域中,一般session
都会设定为半小时过期。
我们可以记录该用户创建session
的时间,作为用户最近登录时间