我的Compeny Current PHP网站的用户正在使用会话记录。在会话中保留一个字段$ _session ['user_id'],并在记录尚未设置此字段时。用户数据之类的名称,地址,余额保存在MySQL用户表中。现在,我想创建一个查询,该查询返回所有登录的用户,余额超过500美元。
您将如何处理此类任务?
认为我有很多用户,因此在会话文件夹中的所有会话中循环,而不是查询数据库,而不是真正的可能性匹配结果。
第二个选项是将用户登录状态保存在用户表中。将其设置为1时登录时,将其登录时为0。这是当前代码基础和公司官僚机构的最简单选择。但是我可以认为同步的问题,特别是如果会话过期
第三个选项是将会话的所有责任转移到DB的所有责任。
您认为最好的做法是什么?
(我想添加@ofir_baruch所说的话,以避免对DB进行多个调用,以一直更新最后一个用户的loggin)
添加一个时间戳记"最后登录",in:
- DB中的用户表(我们称之为:DB的Time-Stamp)
- 在用户的会话中
(例如,会话持续15分钟)当您检查用户的会话是否有效时添加此概念:
(伪代码)
when user request a page:
if session[user] is not valid:
create new session
session[user] = username
session[last-login] = time-stamp
update user's last login column in DB to current time-stamp
else
if ( current_time_stamp - session[last-login] > 15 )
session[last-login] = time-stamp
update user's last login column in DB to current time-stamp
else
do_nothing
这样,您不必每次用户执行某些操作(例如请求页面或刷新)来更新数据库的时间戳记,但仅当通过15分钟时。
如@ofir_baruch在评论中所述。