小台的IT备忘录  
脑子越来越不好用,只能依靠烂笔头了~

最近项目用户登录的要求有所提高,必须单实例登录,要提供记住密码功能,用户登录后会有交易所以必须尽可能提高安全性,所以设计了一下用户登录结构

IP:用户IP,用于区分用户登录所在位置

User:用户名(用户名+Id的Hash串),用于识别用户

Token:用户口令(MD5离散随机数),用于区分单实例登录(每次登录或刷新SessionCache都会更新)

Series:用户序列(MD5离散随机数),用于强制用户登录会话失效重新登录(密码发生变更时更新)

一、首先我们要确定两个规则

1、每次登陆或刷新Session都要更新Token(确保同一时间只有一个会话登录)

2、任何密码变更都需要更新Series(确保之前登录信息失效)

二、cookie中我们保存两种信息(自行选择如何加密)

不记住密码
1、Name
2、Token

记住密码
1、Name
2、Token
3、Series

三、获取用户客户端IP来区分客户位置

四、处理普通会话与记住密码会话的逻辑

在这里是核心判断的位置,我们从Cookie中拿到所需的内容,判断一下Cache中是否有这些会话信息,如果没有可以直接跳转登录页,

如果有再进行以下判断:

1、Name是否与Cache一致
2、IP是否与Cache一致(验证当前为同一个实例访问)
3、Token是否与Cache一致(验证当前为同一个实例登录)
4、Series是否与DB一致(验证当前账户未更新过密码)

结果:

2不一致(用户访问位置异常)
3不一致(用户登录异常)

异常登录提示账户风险,可以引导用户修改密码

4不一致(更新过密码)

可以引导用户重新登录

如果是记住密码那Cache没有就不能直接跳回登录页了,而是核实一下Cookie的内容自动登录,登录需要核实一下几点:

1、Name是否与DB一致
2、Series是否与DB一致
3、酌情判断常用IP记录里是否有当前IP

如果通过作如下操作:

新建Session Cache
存入新Token等

五、我们将Session存到Cache中,大部分用户信息在DB中

总体设计如下图(图太大了可以图片另存为下载查看):

 

一点见解,IP部分不好控制还需要调优,如果有建议还望指导,谢谢

posted on 2018-07-20 17:39  taiyonghai  阅读(2281)  评论(0编辑  收藏  举报