cookie、session实现登录,及特点 (二)
cookie的问题解决方案就是session
cookie存userId,在服务端对应username ,即session
session:即server端存储用户信息。存储会话信息的统称。
总不能存到数据库,频繁访问每一个交易都会带cookie查询用户信息。数据库:速度慢,需要修改信息才需要用。
每一个交易都会带userId,每一个userId都有session对应信息。session是放在最顶层入口app.js
如何实现session:
步骤一:
// 解析session。SESSION_DATA为全局 // userid啥时候赋值的? let needSetCookie = false let userId = req.cookie.userid; if(userId) { if(SESSION_DATA[userId]) { // 有的话, } else { SESSION_DATA[userId] = {} } } else { needSetCookie = true userId = `${Date.now()}_${Math.random()}` SESSION_DATA[userId] = {} } // 从SESSION_DATA中获取 session req.session = SESSION_DATA[userId]
步骤二:设置cookie
if(needSetCookie) { res.setHeader('Set-Cookie',`userid=${userId}; path=/;httpOnly`) }
步骤三:设置session
req.session.username = data.username
req.session.realname = data.realname
当前设置session产生的问题:
1,目前session是js变量,放在nodejs进程 内存中。进程内存有限,访问量过大,消耗内存。
2,正式上线后运行是多进程。进程之间内存不能共享。
浙公网安备 33010602011771号