我有一个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 }
}
我曾尝试弄乱resave
,saveUninitialized
和rolling
属性而没有实际效果。我也尝试使用会话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基本上是一个应用程序,它是其他应用程序的启动板,每个应用程序都在自己的端点,而这些其他应用程序需要能够返回到启动板。
任何想法都赞赏!