Как перезагрузить сессию на основе sid?(экспресс и коннект-монго) - PullRequest
1 голос
/ 20 марта 2012

Я создаю успокоительный API для своей базы данных Mongo и пытаюсь перезагрузить сеанс пользователя на основе SID, отправленного через вызов API. Мой сервер хорошо обслуживает сеансы, но я не могу понять, как перезагрузить сеанс в req.session через connect-mongo и сохранить его снова (на основе оригинального sid) после отправки запроса вне.

Все, что я сохранил в req.session, помещается в совершенно новый сеанс и не записывает в мои данные предыдущего сеанса.

У меня нет проблем с написанием чего-либо для сохранения моих данных сеанса, извлеченных из базы данных, но я решил, что есть способ автоматически обработать их с помощью expressjs или connect-mongo.

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Я закончил тем, что решил свою проблему, хотя я думаю, что многие мои головные боли связаны с моим плохим пониманием того, как следует обрабатывать сессии. Хотя это не то, чего я в конечном итоге хотел, в конечном итоге это дало мне тот же результат.

Просмотр кода Патрика заставил меня задуматься о том, что это, вероятно, какая-то проблема с областями видимости / привязки. С помощью нескольких настроек я, наконец, смог получить доступ к прототипированным функциям connect-mongo, создав объект mongoStore Obj вне сеанса Express, а затем передав этот объект в express.session.

MongoStore = require('connect-mongo')
var mongoSession = new MongoStore(conf.db);

//Configure Session Db
var conf = {
  db: {
    db: 'sessions',
    host: '127.0.0.1',
  },
  secret: 'kittens'
};

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');      
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
  app.use(express.session({
    secret: conf.secret,
    maxAge: new Date(Date.now() + 3600000),
    store: mongoSession
  }));
  app.use(allowCrossDomain);
  app.use(require('stylus').middleware({ src: __dirname + '/public' }));
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));


});

Теперь я смог легко получить / установить предыдущие сеансы через mongostore obj. Я знаю, что, возможно, есть другие способы сделать то же самое (то есть получить прямой доступ к mongodb), хотя я хотел посмотреть, что возможно, просто с помощью самого mongostore obj.

Также спасибо за мысли об этом Патрике, определенно помогли мне мыслить в правильном направлении.

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 20 марта 2012

Это должно работать.Использовал его с хранилищем сеансов Redis раньше.

var self = this;
sid = decodeURIComponent(this.user.cookie['connect.sid']);
MongoStore.get(sid, function(err, session) {
  return self.session = session;
  ...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...