1
passluo 2013-12-09 15:01:21 +08:00
Flask-Security 有
Last login date Current login date Last login IP address Current login IP address Total login count 都是直接扔数据库的。。。 |
3
hustlzp OP @passluo 看了下Flask-Security的源代码,它是在每次调用login_user的时候记录:
https://github.com/mattupstate/flask-security/blob/develop/flask_security/utils.py |
4
passluo 2013-12-09 16:10:48 +08:00
我好像理解错LZ的意思的了 =。=
但是很多应用确实是记录你最后一次「登陆」的时间,你记录最后一次「请求」的时间有什么用呢? |
5
hustlzp OP |
7
9hills 2013-12-09 16:31:17 +08:00 1
|
8
passluo 2013-12-09 16:48:30 +08:00 1
@hustlzp
你可以通过分析 apache 或者 nginx 的 log 来实现这个需求,不一定要动数据库的。 比如 apache 的 access log和 cookie log 换个思路试试? :) |
11
Shieffan 2013-12-09 18:20:04 +08:00 via iPhone 1
session 设一个短的过期时间,每次设置session的时候写入登录时间及IP到redis
|
12
meta 2013-12-10 14:20:59 +08:00 1
就算timestamp8字节,用户ID8字节,这样就算100万用户也才16MB的数据,放在内存里面定期同步到数据库不好吗。
|
14
hustlzp OP 发现也可以订阅Flask发出的request_started信号,这个时候request context刚刚建立起来,但还没有做任何的url dispatch。在这里记录登录时间和IP是蛮不错的!
|
15
hustlzp OP 可以把 “记录用户登录时间/IP” 和 “用户在线” 一起做,都扔进redis里。
|
16
nightsailer 2013-12-13 13:07:56 +08:00
哎呀,有那么复杂吗,也不是土豪,没几个用户和并发吧。
我的做法很简单啊,新session创建的时候,如果用户属于自动登录,更新对应session的用户的登录属性或字段。否则,session登录时候再更新对应用户。 BTW,要啥Redis,没几个用户就担心啥数据库鸭梨,我相信能问这个问题的应用,用户量也就十万级了不得,并发2位数吧。 所以,先用最简单的方式实现,等你用户上去了,数据库已经调优不行了,再考虑引入复杂的方案。 |
17
hustlzp OP @nightsailer 有道理...过度优化
|
18
hustlzp OP @nightsailer 话说,终于冒泡了?看你的主页是第一次回复啊
|
19
joey1988 2014-01-27 19:02:46 +08:00
数据库里面保存一个时间。 用户登录后,取数据库里面的时间保存在session里面。 页面上使用的上次登录时间就用session里面的。 然后数据库里面更新现在的时间。 我之前就是用这个思路的。
|