express-session遇到session失效的问题

在用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又“失效”了。

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

你可能感兴趣的:(nodejs框架)