重定向到/时重置会话

时间:2016-03-24 19:30:42

标签: node.js express cookies web-applications

我有一个Express 4驱动的Web应用程序,它使用快速会话。

在我的前端,我有一个“主页”按钮,用户可以点击返回root。 但是,当我这样做时,我的Express会话被清除。

我的设置是:

{
   store: new KnexSessionStore(),
   secret: 'my secret',
   resave: false,
   saveUninitialized: false,
   name: 'my name',
   rolling: true,
   cookie: { maxAge: 60 * 60 * 1000 }
 }

我曾尝试弄乱resavesaveUninitializedrolling属性而没有实际效果。我也尝试使用会话cookie,没有区别。

我实际上并没有在/路由上运行我自己的任何代码:我只是有一个Express静态服务器,它为一个附加了React应用程序的index.html提供服务:

const express = require('express')
const app = express()
app.use('/', express.static('/my/app/path'))
app.listen(3000, () => console.log('Running on 3000'))

作为补充说明,如果我登录,然后关闭浏览器,然后我重新打开浏览器到我的应用程序,我仍然登录并且我的会话仍然有效(正如人们所期望的那样)。当我明确导航到/时出现此问题,它只是

导航到/的代码是:

服务器:

const api = express.Router()
api.get('/redirect', redirect)
function redirect(req, res, next) {
  if (req.query.target) { return res.redirect(req.query.target) }
  next()
}

app.use('/api', api)

客户端:

<Button
  className='margin-10-right'
  onClick={ () => location.href = '/api/redirect?target=/' }
>
  Home
</Button>

我也尝试将location.href直接设置为/,效果相同。

注意:重定向到/而不是使用React状态返回主页(例如使用react-router)的原因是因为我在不同的URL端点有多个不同的React应用程序。我的根URL基本上是一个应用程序,它是其他应用程序的启动板,每个应用程序都在自己的端点,而这些其他应用程序需要能够返回到启动板。

任何想法都赞赏!

0 个答案:

没有答案