php怎样实现超过48小时,不登陆就封号?

红蜻蜓
  • 100

如标题所描述的,怎样实现这种功能。

是不是得需要一个定时器(类似计划任务这种),例如每1分钟,扫描用户表一次,扫描注册时间,与登陆次数。

超过指定时间,登陆次数还是0。就把封号字段,设置为 真,或1。

我暂时就能想到这一点,有没有高级的方法实现。

另外我还有好多个状态,也都是类似这种的,

例如:

超过某某时间,不操作什么东西,也封号。

超过多少天,不确认收货,也封号。

超过多少天,不干啥,就不给增加积分。

有点头大,想问问大佬们,这种怎么实现的好。

如果我这种监控形式实现,要监控多种目标;如果监控进程挂掉,或者说任务管理器挂了。就监控不到了,可能会导业务发生异常,而影响后续系统运行。

回复
阅读 1.4k
8 个回答

我觉得搞定时器这事情,太变态了。还不如当用户登陆请求发送的时候,检测上一次最后登陆时间计算差值。

你直接在数据库内存储好用户上次登录时间,用户上次确认收货时间,用户上次不操作什么东西时间,待用户下次操作时直接对比不就行了 - -。

有这么复杂吗,记录登陆时间,下次登陆的时候,判断当前时间距离上次登陆的时间是否超过48小时,如果超过了,提示已封号,未超过则登陆成功

延迟队列。把最后一次登录放进队列

redis key 过期通知, 延迟队列,定时任务轮询,登录的时候检测都可以,最好的就是key 过期通知

例如自动收货 超时未支付关闭订单都可以用key过期通知

如果怕进程挂了可以试试这个 https://segmentfault.com/a/11...

拿第二次登录的时间与第一次的时间相比较,大于48小时则进行封号处理。

这么简单的需求还要用定时器,也真的是可以了,,,题主 1 分钟扫描一次用户表,如果有 100w+以上的用户表你怎么扫?
最简单的方法就是每次登陆检查 last_login_time,超过 48h 直接封号,登陆成功时更新last_login_time即可,条条大路通罗马,但是聪明人只走最近的一条

网上仔细查了一下,还真是我说的这种办法,比较可靠。要设置定时任务,监控起来。

如果等待用户触发,这种的,不可靠。

例如自动收货,如果用户买完,永远不登陆了,怎么触发,无法触发。这个订单,就永远是未收货状态。

你知道吗?

宣传栏