【问题标题】:Node.js expressjs sessions don't stick in FirefoxNode.js expressjs 会话不会停留在 Firefox 中
【发布时间】:2012-04-26 07:03:23
【问题描述】:

我在 nodejs 中使用 express,并且会话不会粘在 Firefox 中。但是在 Chrome 中工作正常。

我的 maxAge 为 14400000,我读到这可能是一个问题,因为我的本地机器是 GMT,但它似乎仍然没有坚持。

这是我配置的:

  app.use(express.cookieParser());
  app.use(express.session({ secret: 'mysecret', store: new RedisStore, cookie: { maxAge: 14400000 }}));

我只是通过这样做来设置它:

req.session.user = 'something'

有什么想法吗?

谢谢!

【问题讨论】:

  • 如果你查询数据库,我猜它包含会话。
  • 戴夫同样的问题出现在我身上,如果在 chrome 工作正常的情况下将 express.session 与 mozilla 一起使用,Firefox 浏览器将无限加载......你找到任何参考吗?...

标签: session node.js cookies express


【解决方案1】:

没有浪费时间,这里是修复:

app.use(
   session({
   httpOnly: false,
   secret: "top secret",
  })
 );

现在如果你对真实故事感兴趣:

Mozilla 是一个严格的浏览器。她按规矩办事。如果某些东西在 Mozilla 中不起作用但在 chrome 中不起作用,则意味着您做错了。 在生产环境中,我们设置 https 。默认情况下 express.session httpOnly 为真,只需将其设为假即可。 :) 所以它也可以在 https 上工作。

【讨论】:

    【解决方案2】:

    在您首次建立会话时尝试使用req.session. regenerate(callback)。它看起来像这样:

    app.use(express.cookieParser());
    app.use(express.session({ secret: 'mysecret', store: new RedisStore, cookie: { maxAge: 14400000 }}));
    
    var user = //Define your user
    
    req.session.regenerate(function() {
       req.session.user = user;
       res.redirect('/loggedin');
    });
    

    试一试!

    【讨论】:

    • 这将导致为每个页面视图重新创建会话。我认为这可能更像是一种解决方法而不是解决方案。我会自己做更多的搜索。
    • 绝对是一种解决方法,如果您找到更好的解决方案,请告诉我。 (老实说,我不确定这个问题是否仍然存在)。
    • 我忘了这个。哦...刚刚检查了一下,它不在我的代码中,所以它一定是用npm update express 或其他东西整理出来的。
    • 哈哈不用担心,很高兴解决了!
    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 2012-07-19
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多