zoukankan      html  css  js  c++  java
  • 用户登录设计 单点登录 记住密码等

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

    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部分不好控制还需要调优,如果有建议还望指导,谢谢

  • 相关阅读:
    文本编辑器js插件
    日期时间JS插件
    原生JS写验证码
    PHP语言开发微信公众平台(订阅号)之curl命令
    PHP语言开发微信公众平台(订阅号)之开启开发者模式(3)
    PHP语言开发微信公众平台(订阅号)之注册(1)
    取出关联数组的key值和values值
    关于PHP单双引号解析变量的问题
    HDU1243:反恐训练营
    HDU1244:Max Sum Plus Plus Plus
  • 原文地址:https://www.cnblogs.com/taiyonghai/p/9342784.html
Copyright © 2011-2022 走看看