【原创】数据库定时任务特性的妙用
数据库定时执行任务,在业界流行的各种数据库基本都有这项功能,这项功能极大的方便了我们定时处理一些事务,在笔者的web应用开发经验中发现其两大妙用:
一、判断浏览器用户是否在线
在我们的web应用里经常会遇到用户登录后要长期保持登录状态,系统要能统计当前在线用户数量这样的需求,我们可以使用ajax定时触发调用后台脚本向数据库登录状态表中写入最近一次的脚本调用时间,假设我们每1分钟触发一次ajax脚本,我们不妨称之为心跳,在后台数据库中我们启用一个定时任务,假设也是每1分钟触发,用于检查当前时间距离这个用户最近的活跃时间是否超过1分钟,如果超过,那么说明这个用户的前端没有在指定的时间1分钟间隔内访问后台,这个用户已经离线,将该用户登录状态置为离线。如果没有超过,那么说明用户的心跳一直还在跳动,是活跃用户,没有离线。当然考虑网络延迟和数据库操作延迟时间,我们可以将阈值稍微设置大一些比如1分30秒。通过这个办法可以大致上确定用户在线数量,数据库定时任务的触发间隔越短,用户在线数量越精确,但应考虑数据库的负荷来设置适当的时间间隔。
二、跨域或跨站单点登录
只要主登录站点将是否登录信息写入数据库,然后一所叙述的技术定时判定用户是否在线来维护用户的登录状态。将该登录信息数据库开放给其他站点访问,由其他站点获取用户的登录信息即可实现单点登录。这是长期保持登录状态的情况,如果要实现用户长时间不动机器就让用户下线的情况,在用户数据库中添加一个最后操作时间字段,只需要在每个访问后台的应用里包含一个写最后操作时间字段的共同脚本文件,如果当前操作时间-最后操作时间>预定的超时时间就可以将用户登录状态设置为离线,并清空session。