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
圖 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
session
地址: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
圖 6
spa
在建立了Session的同時,服務器會爲該Session生成惟一的SessionID
1,判斷是否同一次會話,區別於不一樣用戶的操做
客戶端發送請求的時候,會將SessionID帶上,以得到對應的Session;服務器能夠根據瀏覽器請求調用Session相關的方法,或往Session中增長內容,(這些內容只會保存在服務器中,發到客戶端的只有SessionID)3d
2.從產品角度看,提升用戶體驗,保護用戶權益
假設登陸狀態,本人不在,不法分子沒法經過sessionID獲取用戶密碼,用戶只要退出登陸便可防止不法分子使用本身的帳號code