我需要帮助来了解Web应用程序的会话概念。我正在使用Express 3.0运行Node.js服务器。
为每个登录的用户创建一个会话
存储此会话,并将其用于验证用户是否已登录(防止同时使用同一用户的两个设备)并限制对某些页面的访问(通过将会话ID与其他数据匹配)
我将使用MemoryStore保存会话(似乎最简单)。如果上述目标有意义,您能否提供有关如何实现这些目标的详尽解释?
Express 在github仓库中有很好的例子。其中之一负责身份验证,并说明如何将用户附加到req.session对象。这是在app.post('/login')路线内部完成的。
req.session
app.post('/login')
要限制对某些页面的访问,请向这些路由添加一个简单的中间件
function restrict(req, res, next) { if (req.session.user) { next(); } else { req.session.error = 'Access denied!'; res.redirect('/login'); } } app.get('/restricted', restrict, function(req, res){ res.send('Wahoo! restricted area, click to <a href="/logout">logout</a>'); });
正如布兰登已经提到的那样,您不应在生产中使用MemoryStore。Redis是一个很好的选择。使用connect-redis访问数据库。一个示例配置如下所示
var RedisStore = require('connect-redis')(express); // add this to your app.configure app.use(express.session({ secret: "kqsdjfmlksdhfhzirzeoibrzecrbzuzefcuercazeafxzeokwdfzeijfxcerig", store: new RedisStore({ host: 'localhost', port: 3000, client: redis }) }));