一般登录流程图
模拟客户端与服务器通信
注册
地址: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获取用户密码,用户只要退出登录即可防止不法分子使用自己的账号