当前位置: 首页 > 工具软件 > session.js > 使用案例 >

关于express-session中间件中拿不到req.session.xxx获取不到数据的猜测原因和解决

蔺敏达
2023-12-01

问题背景:我在做一个博客项目时,用express搭建,并引入express-session来做数据存储处理,但是按照官网上引入和初始化之后,发现用req.session拿不到数据

//这是官网的
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: true }
}))

解决:

在设置了saveUninitalized和cookie之后就可以了,如下
app.use(session({
    secret:"keyboard cat",
    resave:false,
    saveUninitalized:true,
    cookie: {
        maxAge: 1000 * 60 * 60
    }
}))

原因

可以看到,两者的区别主要是在cookie的值上有变化。maxAge通过字面意思可以知道是设置cookie的最长存在时间。
如果cookie设置了安全标志,它将只由浏览器通过https发送到服务器,而不是普通的http。这应该是生产环境的默认值。
然而,在开发应用程序时,您可能会在开发机器上使用普通http。如果您在这种情况下将会话cookie设置为安全的(使用纯http),服务器将永远不会收到它,并且您将在每次请求时经历一个新的空会话。
因此,简而言之,只有在使用https的情况下(也就是说,在开发管道的后期阶段,并且肯定是在生产阶段),才应该将cookie设置为安全的。
所以我是在开发阶段有些地方使用的是普通http请求,当然浏览器收到的也就是一个空的会话了。

拓展

这里是其他的参数的解读:
	1.secret:配置加密字符串,它会在原有加密基础之上和这个字符串拼起来去加密,
目的是为了增加安全性,防止客户端恶意伪造
	2.resave以后更新
	3.saveUninitalized
	//设置为true:无论你是否使用 SessionId我都默认直接给你分配一把钥匙
	//设置为false:如果你删除了sessionId,只有你重新请求服务器,才会给你重新分配一把,不然就一直为空
 类似资料: