直观登陆原理,触类旁通·再也不烦恼用户操做失败缘由

通常登陆流程图

未命名文件.jpg

模拟客户端与服务器通讯

GitHub下载demogit

注册

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

//注册过程
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
image.png
图 2
image.png浏览器

登陆

地址: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
image.png
图4
image.png
图5
image.pngsession

修改昵称

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

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: `请先登陆`
            })
        }
    }

图 5
image.png
图 6
image.pngspa

sessionID

什么是sessionID
在建立了Session的同时,服务器会为该Session生成惟一的SessionID
为何须要sessionID

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

2.从产品角度看,提升用户体验,保护用户权益
假设登陆状态,本人不在,不法分子没法经过sessionID获取用户密码,用户只要退出登陆便可防止不法分子使用本身的帐号code

相关文章
相关标签/搜索