Как получить SessionID в NodeJS с несколькими серверами?

Я новичок в NodeJS. Я разрабатываю REST API и использую экспресс-сеанс для работы с сеансами. Итак, чтобы получить идентификатор сеанса, который я использую

var sessionID = req.sessionID

Этот идентификатор сеанса генерируется на стороне сервера. Итак, когда я масштабируюсь до двух или более серверов, это проблема. Например, если один сервер отключается и запрос перенаправляется на другой сервер (при условии, что у меня есть балансировщик нагрузки), создается новый идентификатор сеанса. Итак, есть ли способ получить идентификатор сеанса со стороны клиента?


person Aishwarya Krishnan    schedule 01.10.2015    source источник
comment
Вы не можете. Отправляйте сеансы в Redis или любую другую базу данных, но следует отказаться от сеансов на основе файлов cookie. Рекомендуется использовать заголовки авторизации.   -  person Explosion Pills    schedule 01.10.2015


Ответы (1)


Хороший вопрос! Управление сессиями может быть сложной задачей, особенно потому, что для запуска любого сложного управления сессиями в узле вам нужна масса различных пакетов, каждый со своим собственным набором документации. Вот пример того, как вы можете настроить управление сеансом с помощью MongoDB:

'use strict';

var express = require('express'),
  session = require('express-session'),
  cookieParser = require('cookie-parser'),
  mongoStore = require('connect-mongo')(session),
  mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/someDB');

var app = express();

var secret = 'shhh';

app.use(session({
  resave: true,
  saveUninitialized: true,
  secret: secret,
  store: new mongoStore({
    mongooseConnection: mongoose.connection,
    collection: 'sessions' // default
  })
}));

// ROUTES, ETC.

var port = 3000;

app.listen(port, function() {
  console.log('listening on port ' + port + '.')
});

Эта конфигурация дает вам доступ к req.sessionID, но теперь она должна сохраняться на серверах приложений, если срок действия файла cookie сеанса пользователя не истек.

Я надеюсь, что это работает!

person Huston Hedinger    schedule 01.10.2015
comment
Спасибо! Теперь у меня есть еще один вопрос. Итак, в моем случае я должен запустить монго на другом сервере (то есть у меня должен быть запущен третий сервер)? Чтобы он был разделен между двумя? Потому что предоставление «localhost» приведет к отключению Магазина, когда весь сервер отключится, верно? - person Aishwarya Krishnan; 02.10.2015
comment
Это большой вопрос, который вы задаете, и я не думаю, что смогу отдать ему должное... Вам НЕ ОБЯЗАТЕЛЬНО хранить монго на третьем сервере. Какой бы сервер приложений НЕ находился на том же хосте, тогда ему нужно будет сделать запрос от Mongo на основе IP-адреса и порта сервера, на котором работает Mongo... Реальность такова, если вы собираетесь развернуть несколько серверов приложений за балансировщиком нагрузки, и ваше приложение требует такого масштаба, вероятно, имеет смысл разместить mongo на третьем сервере. Узнайте, как настроить соединение монго [здесь] ( mongoosejs.com/docs/connections.html). - person Huston Hedinger; 03.10.2015