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

问题背景:我在做一个博客项目时,用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,只有你重新请求服务器,才会给你重新分配一把,不然就一直为空
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

|Mark|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值