我在我的节点js / express js网站上成功设置了会话管理。我将会话数据存储在mongo db中。我希望会话对于登录几周的用户有效。代码如下:
var cookieParser = require('cookie-parser');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
app.use(cookieParser());
app.use(session({
store: new MongoStore({ mongoose_connection: db }),
secret: 'cookie_secret',
cookie: { maxAge: null }
}));
它适用于普通用户,但我的问题是网页抓取工具,如谷歌机器人和Facebook机器人。我仍然希望他们抓取我的网站,但我不希望他们的会话存储在我的mongo数据库中。它占用了大量的空间,存储空间日益增加,这让我付出了代价。
如何有选择地选择要在db中存储的会话。我可以检查req.headers['user-agent']
,但在我的代码中将它用于何处?如何告诉快递会有时不存储会话?
答案 0 :(得分:2)
您可以根据User-Agent
标头有条件地使用会话中间件。一个简单的例子:
var sessionMiddleware = require('express-session')({
...configuration here...
});
app.use(function(req, res, next) {
var ua = req.get('user-agent');
// If the User-Agent header contains the string "Googlebot",
// skip the session middleware.
if (/Googlebot/.test(ua)) {
req.session = {}; // perhaps a bit too simple?
return next();
}
return sessionMiddleware(req, res, next);
});
如果上面的代码有效,或者你需要更好地模拟req.session
(例如,如果你使用{{1}中的任何一个),这将取决于你req.session
的实际使用情况代码中的方法,
你可能也需要嘲笑那些。)