直觀登陸原理,觸類旁通·再也不煩惱用戶操做失敗緣由

通常登陸流程圖

未命名文件.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

相關文章
相關標籤/搜索