请问老师SESSION_DATA这个值好像没有任何赋值呀?它一直是空的?还是说我哪里理解的有问题呢

来源:7-8 从 session 到 redis

云在258

2019-03-20

如题…

写回答

6回答

菜鸟junior

2019-03-20

SESSION_DATA在serverHandle函数之外初始化为空对象,当serverHandle函数被调用的时候,SESSION_DATA对象添加新userid属性并保存,在闭包作用下,serverHandle函数没有被回收,就是serverHandle函数内部变量占用内存,SESSION_DATA对象里保存着userid对象。如果node服务器关闭或重启,那么serverHandle函数销毁,内存消除SESSION_DATA对象

如果还是不懂闭包的话要深入作用域与闭包哦

4
0

云在258

提问者

2019-03-20

感谢群里同学的回答:

“SESSION_DATA是一个以userid为key,用户data对象为value的map。赋值给req.session是某个userid对应的用户data,而不是SESSION_DATA

req.session存的是当前访问用户的用户信息,SESSION_DATA存的是所有访问用户的信息”

4
1
不败的德鲁大叔
明白了,刚进入页面会把SESSION_DATA[userId]的引用先赋值给req.session,然后登录成功,会给req.session赋值用户信息.此时对应的SESSION_DATA[userId]也有当前用户的信息。
2019-09-30
共1条回复

FunnyCoder24

2023-06-02

这个地方的 req.session 是一个引用,指向了 SESSION_DATA[userId],所以,当 req.session 发生变化的时候,SESSION_DATA[userId] 也会发生变化,  SESSION_DATA[userId] = req.session, 也就是说,SESSION_DATA[userId] 和 req.session 指向的是同一个对象

0
0

我不是蜗牛

2021-08-16

也是看了好久才想明白。

req.session = SESSION_DATA[userId]。   表明req.session和SESSION_DATA[userId]引用的同一个对象,所以对req.session赋值就是对SESSION_DATA[userId]赋值。因为SESSION_DATA在app.js中声明的,user.js中读不到,所以只能通过req.session间接对SESSION_DATA[userId]赋值。


0
0

云在258

提问者

2019-03-20

(这个问题还是6-7的,发错位置了)

//img.mukewang.com/szimg/5c91d5b10001134e07620535.jpg


这个SESSION_DATA最开始初始化为空对象,后来被赋值给req.session

但是一直没有给他一个值?

0
0

双越

2019-03-20

把代码截图,贴出来吧,这样其他同学更能看清楚问题。

0
1
云在258
老师,代码截图放在回答里了,麻烦老师看一下呢~
2019-03-20
共1条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4051 学习 · 2006 问题

查看课程