我想使用express.js中的会话,我知道我们可以从req.session.id中捕获会话ID,而且我也知道这个id总是不同的(每次我们访问路径时):
我看到有些人建议在全局范围内获取并保存会话,但问题是(除非我错了),如果我在用户以这种方式连接我的应用程序时保存会话:
app.get('/init', function(req, res) {
global.session = req.session;
});
如果User_1连接我的应用程序,那么User_2仍然连接我的应用程序和User_1,global.session将包含User_2会话的值,即使对于User_1也是如此?
如果我是对的,如何正确保存会话?我想到了一个由init路由的req.session.id索引的数组,但是因为即使同一个用户访问同一个路由(这是正常的吗?)总是不同的,所以不可能这样做。
您找到管理会话的最佳方式是什么?
谢谢!
答案 0 :(得分:1)
不要将会话保存在全局变量中,因为这意味着站点的每个后续访问者都将使用和修改同一个变量(您使用相同的express实例来处理所有请求。)您可以使用express内置中间件,在您开发应用程序时将会话存储在内存中。在开始声明路线之前,请先放入以下中间件:
app.use(express.cookieParser()); /* Parses cookies. */
app.use(express.cookieSession({ secret: 'yoursecret' })); /* Handles sessions stored in your cookies. */
// ... your other middleware
app.get('/', function(req, res) {
if (req.session) {
res.json(req.session);
} else {
res.send('You have no session.');
}
});
对于制作,建议使用像Redis这样的东西来存储你的会话。