express-session遇到session失效的问题

在使用express-session时遇到session存储失效问题,主要原因是启用了secure选项且未使用HTTPS,以及将Set类型数据存入session导致JSON序列化错误。为解决此问题,需确保HTTPS环境或设置'trust proxy',并避免直接存储Set类型数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在用express-session的时候,遇到了session存储Set失效的问题

经过分析,此失效有两个原因

  1. 启用了secure选项

    Please note that secure: true is a recommended option. However, it requires an https-enabled website, i.e., HTTPS is necessary for secure cookies. If secure is set, and you access your site over HTTP, the cookie will not be set. If you have your node.js behind a proxy and are using secure: true, you need to set “trust proxy” in express:

    var app = express()
    app.set('trust proxy', 1) // trust first proxy
    app.use(session({
      secret: 'keyboard cat',
      resave: false,
      saveUninitialized: true,
      cookie: { secure: true }
    }))

    这是express-session的GitHub上的介绍,这段话的大义如下:
    请注意,secure:true是一个推荐的选项,但是这个选项必须采用HTTPS协议。如果启用了secure,但是是用HTTP进行的访问,那么cookie不会发送给客户端,如果nodejs前是有反向代理服务器的,那么需要开启trust proxy。

    这段话说明了造成session“失效”的原因是这只了secure选项,但是却用HTTP协议进行访问,同时也给了一个“解决”方法,就是设置trust proxy。

  2. 按道理说,现在session应该有效了,然而并没有
    因为刚出狼窝,又入虎口… 简单的说,因为我写Java习惯了,向Session里丢了一个Set
    演示代码:

    var container = new Set();
    container.add('liang');
    console.log(container);
    console.log(JSON.stringify(container));
    运行结果:
    Set { 'liang' }
    {}

    因为express-session推荐用redis或者mongoDB存session的,所以它是拿到Object的JSON后存储的。
    然而一个Set的JSON是{},于是session又“失效”了。

    到这里,这个问题终于解决了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值