请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

正在回答 回答被采纳积分+3

6回答

菜鸟junior 2019-03-20 15:14:29

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

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

4 回复 有任何疑惑可以回复我~
提问者 云在258 2019-03-20 15:13:38

感谢群里同学的回答:

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

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

4 回复 有任何疑惑可以回复我~
  • 明白了,刚进入页面会把SESSION_DATA[userId]的引用先赋值给req.session,然后登录成功,会给req.session赋值用户信息.此时对应的SESSION_DATA[userId]也有当前用户的信息。
    回复 有任何疑惑可以回复我~ 2019-09-30 09:53:29
FunnyCoder24 2023-06-02 12:08:09

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

0 回复 有任何疑惑可以回复我~
我不是蜗牛 2021-08-16 22:16:56

也是看了好久才想明白。

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 回复 有任何疑惑可以回复我~
提问者 云在258 2019-03-20 13:56:34
(这个问题还是6-7的,发错位置了)

https://img1.sycdn.imooc.com//szimg/5c91d5b10001134e07620535.jpg


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

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

0 回复 有任何疑惑可以回复我~
双越 2019-03-20 13:42:54

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

0 回复 有任何疑惑可以回复我~
  • 提问者 云在258 #1
    老师,代码截图放在回答里了,麻烦老师看一下呢~
    回复 有任何疑惑可以回复我~ 2019-03-20 13:57:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信