问题背景:我在做一个博客项目时,用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,只有你重新请求服务器,才会给你重新分配一把,不然就一直为空