需求是用户帐号被禁用多少天以后,自动在之前禁用的时间点进行解封,例如7月1日上午10点被禁用7天,然后需要在7月7号的上午10点进行自动解封,求实现思路,感谢! |
|
20分
#1 |
新建一个表 user_block,存储 block 信息:
id, user_id, block_start_time, block_time 登录的时候,同时检查 user_block 表中这个用户的 block 信息,如果在 block 时间中,那么不允许登录。 使用一个 scheduler 任务,定期扫描 user_block 表,把过期的 block 信息删除。 |
#2 |
回复楼: 请问这个任务是在数据库里设置好,还是通过程序来设置定时扫描好呢 |
#3 |
回复1楼: 表的设计我清楚,但如果这样实现,后台管理在对用户信息进行查看的时候,他的状态也许不是最新的,不可能在每次查询的过程中再次进行判断和更新,同时这样也没有实现定时自动解封的效果,期待回复,感谢! |
20分
#4 |
用户表中应该有用户状态字段,控制用户是否可以登录;
禁用:设置状态为不可登录;一个专用的表(禁用信息表)记录禁用结束时间 |
#5 |
封了之后启动定时器…
|
#6 |
回复2楼: 数据库中创建一个存储过程,再创建一个计划任务,定时执行这个存储过程即可 |
#7 |
回复2楼: 程序定时扫描 |
#8 |
回复3楼: block 信息加载到内存就可以了,这样不用每次都查数据库。 |
#9 |
用定时任务吧,quartz就不错
|
5分
#10 |
我是这方面的小白,我只说一下自己的想法哈,禁用账号时间+禁用天数 = 解封时间,然后把这个解封时间存到一个字段,用户登录时判断下这个时间就知道解封没有啊,如果字段不存在或当前时间大于解封时间,就可以把这个字段置为空。
|
#12 |
回复8楼: 性能上会有所折扣,及时性不够强,但也是一种可采纳的解决办法,感谢! |
#13 |
回复9楼: 定时任务太耗性能,而且及时性不强,根据需求暂且换了一种解决方案。 |
#14 |
回复10楼: 大众的实现思路是这样的。 |
#15 |
回复14楼: 求更详细的说明, |
5分
#16 |
既然禁用开始时间和结束时间都清楚,那么可以在登录时直接判断当前时间是否处于禁用时间段内。
禁用状态也可以根据这个逻辑处理。 |
#17 |
没必要搞什么定时的,我的想法是
写个更新用户表能否登陆的状态的方法,当用户登陆的时候可以调用这个方法更新下状态(不过也可以用楼上的,再写个方法,判断是否超过解封时间),实现是否允许登陆 楼主要查看用户管理的信息,在查看之前调用这个方法,更新完之后再进行查看 |
#18 |
数据库里面记录下是否被禁用,以及 禁用日期,每次登录时 检查下 禁用时间 是否过期,如果过期了,就把数据库里面的禁用 记录 删掉,前提是 登陆的账号密码正确,如果 不正确,则吧数据库里面的 禁用日期更新为当当前的登录时间..
|