快递会话商店用户代理

时间:2014-10-14 08:22:11

标签: node.js session express web-crawler

我在我的节点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'],但在我的代码中将它用于何处?如何告诉快递会有时不存储会话?

1 个答案:

答案 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的实际使用情况代码中的方法, 你可能也需要嘲笑那些。)