直观登录原理,举一反三·不再烦恼用户操作失败原因

一般登录流程图

在这里插入图片描述

模拟客户端与服务器通信

GitHub下载demo

注册

地址:127.0.0.1:8000/reg?uid=用户名&pass=密码,然后回车

//注册过程
if (pathname === '/reg') {
        const uid = String(params.uid)
        const pass = String(params.pass)
        //服务器判断该用户是否存在
        if (uid__pass__dic[uid] === undefined) {
            //用户不存在,保存用户
            uid__pass__dic[uid] = pass
            //图1
            end({
                isSuccess: true,
                msg: `注册成功 uid is${uid} pass is ${pass}`
            })
        } else {
            //用户存在,不需要保存 图2
            end({
                isSuccess: false,
                msg: `用户名已注册`
            })
        }

    }

图 1
在这里插入图片描述
图 2
在这里插入图片描述

登录

地址:127.0.0.1:8000/login?uid=用户名&pass=密码,然后回车

  //登录过程
    else if (pathname === '/login') {
        const uid = String(params.uid)
        const pass = String(params.pass)
        //判断用户名是否存在
        if (uid__pass__dic[uid] !== undefined) {
            //判断密码是否正确
            if(uid__pass__dic[uid] === pass){
                let sId = sid()
            //图3
            end(
                {
                    isSuccess: true,
                    msg: `登录成功 uid is${uid} pass is ${pass}`
                },
                //服务器返回含随机生成的sessionID的Set-Cookie
                {
                    'Set-Cookie': querystring.stringify({ sessionID: sId }),
                })
                //浏览器自动保存sessionID
            sessionID__uid__dic[sId] = uid
            }else{
            //图4
                end(
                    {
                        isSuccess: false,
                        msg: `密码错误`
                    })
            }
            
        } else {
        //图5
            end(
                {
                    isSuccess: false,
                    msg: `该用户未注册`
                })
        } 
    }

图3
在这里插入图片描述
图4
在这里插入图片描述
图5
在这里插入图片描述

修改昵称

地址:127.0.0.1:8000/set_nickname?nickname=昵称,然后回车

else if (pathname === '/set_nickname') {
        const nickname = String(params.nickname)
        //判断sessionID是否存在
        if (sessionID__uid__dic[sessionID] !== undefined) {
            //查找用户名
            const uId=sessionID__uid__dic[sessionID]
            //保存昵称
            uid__nickname__dic[uId] = nickname
            //图6
            end({
                isSuccess: true,
                msg: `设置昵称成功 nickname is${nickname}`
            })
        } else {
         //图7
            end({
                isSuccess: false,
                msg: `请先登录`
            })
        }
    }

图 6
在这里插入图片描述
图 7
在这里插入图片描述

sessionID
什么是sessionID

在创建了Session的同时,服务器会为该Session生成唯一的SessionID

为什么需要sessionID

1,判断是否同一次会话,区别于不同用户的操作
客户端发送请求的时候,会将SessionID带上,以获得对应的Session;服务器可以根据浏览器请求调用Session相关的方法,或往Session中增加内容,(这些内容只会保存在服务器中,发到客户端的只有SessionID)

2.从产品角度看,提高用户体验,保护用户权益
假设登录状态,本人不在,不法分子无法通过sessionID获取用户密码,用户只要退出登录即可防止不法分子使用自己的账号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值