您需要存储在一个“全球性”区域会话数据,这是对所有服务器进行访问。这可能是redis
或其他数据库。
以MEAN.JS为例。在这里,他们使用express-session
与MongoDB存储容器(因为它们是MEAN堆栈;),通过connect-mongo。他们的项目非常容易设置,如果仅仅是一个例子。
代码,同时建立明确的是这样的:
//top of file
var session = require('express-session')
mongoStore = require('connect-mongo')({
session: session
});
//...later in setup
// Express MongoDB session storage
app.use(session({
saveUninitialized: true,
resave: true,
secret: config.sessionSecret,
store: new mongoStore({
db: db.connection.db,
collection: config.sessionCollection
})
}));
// use passport session
app.use(passport.initialize());
app.use(passport.session());
我的后端有一个数据库(dynamodb),但这是否意味着每个页面视图都有一个数据库调用?这对我来说似乎有点过分。我记得我读过某处(实际上首先是我通过护照会话工作的),实际上你可以将整个会话数据分类,加密并保存到一个cookie中,并因此无需登录数据的后端存储。 – 2014-09-25 20:09:31
有很多方法来处理这样的事情。请注意,您仅存储在客户端上的任何内容都比服务器端更加暴露。是的,这是针对需要会话身份验证的每个操作的数据库调用。在大多数情况下,使用像Redis或Memcache这样的“内存中”数据库(可在AWS上获得价格)的速度比Dynamo或Mongo更快。要在服务器之间共享会话,您需要在某处可访问的数据;我给出的例子只是一个可供您随时访问的例子。 – clay 2014-09-26 13:30:39