connect-mongo每秒创建一个新会话 [英] connect-mongo creating new session every second

查看:133
本文介绍了connect-mongo每秒创建一个新会话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Nodejs应用托管在Openshift上.这是我的规格:

I have my nodejs app hosted on Openshift. Here are my specs:

节点v0.10.35,表示v3.4.8

node v0.10.35, express v3.4.8

我的package.json依赖项:

My package.json dependencies:

"dependencies": {
"angular-loading-bar": "^0.9.0",
"async": "^2.0.0-rc.5",
"bcrypt-nodejs": "0.0.3",
"body-parser": "~1.0.0",
"connect-flash": "^0.1.1",
"connect-mongo": "^1.2.0",
"cookie-parser": "~1.0.0",
"ejs": "^2.4.1",
"express": "~3.4.4",
"lodash": "^4.12.0",
"method-override": "~1.0.0",
"mongodb": "~2.x",
"mongoose": "~4.4.12",
"morgan": "~1.0.0",
"nodemailer": "^2.3.2",
"passport": "^0.3.2",
"passport-local": "^1.0.0",
"recaptcha2": "^1.0.8"
},

这是我的server.js

And here is my server.js

#!/bin/env node

var express = require('express');
var fs      = require('fs');
var mongoose = require('mongoose');
var passport = require('passport');
var flash    = require('connect-flash');

var morgan       = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser   = require('body-parser');

var MongoStore = require('connect-mongo/es5')(express);

var app = express();

var server_port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '0.0.0.0';

//MongoD
mongodb_connection_string = process.env.OPENSHIFT_MONGODB_DB_URL + "tenders";
mongoose.connect(mongodb_connection_string);
var dbconn = mongoose.connection;
dbconn.on('error', console.error.bind(console, 'connection error:'));
dbconn.once('open', function(){
    console.log('Connected to Mongoose Database.');
});

// Close MongoD connection when app is terminated
process.on('SIGINT', function (){
   mongoose.disconnect();
   dbconn.close(function (){
       console.log("Server halted: Mongoose default connection disconnected.");
       process.exit(0);
   }); 
});

/* Configuration */
app.set('view engine', 'ejs'); // set up ejs for templating

/* Middlewares */
app.use(express.static(__dirname + "/views"));
app.use(express.static(__dirname + "/public"));

// set up our express application
app.use(morgan('dev')); // log every request to the console
app.use(bodyParser()); // get information from html forms
app.use(cookieParser()); // read cookies (needed for auth)

/** Persistent database backed session **/
app.use(express.session({ 
    secret: process.env.SECRET,
    store: new MongoStore({mongooseConnection : mongoose.connection}) 
}));

app.use(passport.initialize());
app.use(passport.session());
app.use(flash()); 

require('./routes/routes')(app, passport); 
require('./config/passport')(passport);  configuration

app.use(function(req, res) {
    res.redirect('/')
});

app.use(function (err, req, res, next) {
  if (err.name === 'UnauthorizedError') {
    res.status(401);
    res.json({"message" : err.name + ": " + err.message});
  }
});

/* Start server */
app.listen(server_port, server_ip_address, function(){
    console.log("Listening on " + server_ip_address + ":" + server_port);
});

问题是connect-mongo每秒钟创建一个新会话,正如我从对数据库中的session集合中的条目数进行计数所看到的那样.即使当前没有活跃的用户正在使用该网站,也会创建会话.这正常吗?

The problem is connect-mongo is creating a new session every second as I can see from counting the number of entries in sessions collection in my database. The sessions are being created even when there are no active users currently using the website. Is this normal ?

编辑:是否是由于我使用了中间件来检查用户是否在大多数api调用中使用了经过护照认证的方法登录.但是奇怪的是,即使没有用户向服务器发出请求,它也会被调用,正如您从下面的node.log可以看到的那样,它不断重定向

Edit : Is it due to the middleware I use to check if user is logged in using passport isauthenticated method for most of the api call. But the strange thing is its being called even when there are no users making requests to server as you can see from the node.log below that keeps redirecting

GET / 302 3ms - 40b
GET / 302 3ms - 40b
GET / 302 2ms - 40b
GET / 302 2ms - 40b
GET / 302 3ms - 40b
GET / 302 20ms - 40b
GET / 302 3ms - 40b
GET / 302 2ms - 40b
GET / 302 3ms - 40b
GET / 302 4ms - 40b

推荐答案

好的,这是HAProxy不断检查后端服务器以查看其正常运行的问题.这样做是在每秒创建一个会话,并使我的数据库混乱.这是我的( )修复程序:

Okay, it is the issue with HAProxy continuously checking the backend server to see that its up and working. In doing so it is creating a session a second and cluttering my database. So here is my (dirty) fix:

  1. 创建一个通过破坏每个会话来处理HAProxy的httpchk的api /ping

app.get('/ping', function(req, res){ req.session.destroy(); res.send(200); });

app.get('/ping', function(req, res){ req.session.destroy(); res.send(200); });

配置haproxy/confoption httpchk GET /更改为option httpchk GET /ping

使用RHC rhc cartridge-restart --cartridge haproxy

这篇关于connect-mongo每秒创建一个新会话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆