Подтвердить что ты не робот

Какая разница с экспресс-сессией и cookie-сессией?

Я новичок в Express. Поскольку Express 4.x удалил связанные средние. Любое промежуточное ПО, которое я хочу использовать, должно быть необходимо. Когда я прочитал README с экспресс-сессией и cookie-session в github, мне трудно понять разница.

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

var express = require('express')
  , cookieParser = require('cookie-parser')
  , session = require('cookie-session')
  , express_sess = require('express-session')
  , app = express();

app.use(cookieParser())
app.use(session({ keys: ['abc'], name: 'user' }));
//app.use(express_sess({ secret: 'abc', key: 'user'}));
app.get('/', function (req, res, next) {
    res.end(JSON.stringify(req.cookies));
    console.log(req.session)
    console.log(req.cookies)
});

app.listen(3000);

Для cookie-session я всегда получаю {} в моем терминале.

Для express-session, я получаю такие вещи.

req.session: { cookie: { 
     path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: true 
   } 
}

req.cookie: {user: 's:aJ97vKA5CCwxqdTj0AV1siRQ.fWusS5+qfCKICtwkfrzcZ/Gq8P0Qdx/kx8mTBhoOhGU'}

Это меня действительно смущает. Итак, как объяснить результат с помощью основного использования? И какая разница между ними? Когда я должен их использовать?

4b9b3361

Ответ 1

В принципе, express-session является более абстрактным, он поддерживает разные хранилища сеансов (например, файлы, БД, кеш и многое другое).

И cookie-session - это простой/легкий файл cookie (cookie - единственный поддерживаемый движок хранения: вся информация о сеансе хранится на сеансе клиента, в cookie). Этот вид сеансов, вероятно, наиболее известен своей Rails-реализацией.

Ответ 2

Основное различие между ними связано с тем, как и где хранятся данные сеанса. Сегмент cookie в основном используется для облегченных приложений сеанса, где данные сеанса хранятся в файле cookie, но внутри клиента [браузер], тогда как Экспресс-сессия хранит только простой идентификатор сеанса внутри файла cookie на стороне клиента, сохраняя данные сеанса целиком на сервере. Cookie Session полезно в приложениях, где база данных не используется в фоновом режиме. Однако данные сеанса не могут превышать размер файла cookie. В условиях, когда используется база данных, она действует как кеш, чтобы остановить частой поиск базы данных, который является дорогостоящим.

Ответ 3

express-session хранит идентификатор сеанса в connect-redis cookie, в то время как фактические данные сеанса находятся в хранилище внутренних сеансов, например connect-redis, где в качестве cookie-session позволяет сохранять данные сеанса в connect-redis cookie (на стороне клиента).

Из документации cookie-session:

Пользовательский сеанс может быть сохранен двумя основными способами с помощью файлов cookie: на сервере или на клиенте. Этот модуль хранит данные сеанса на клиенте в файле cookie, в то время как такой модуль, как экспресс-сеанс, сохраняет только идентификатор сеанса на клиенте в файле cookie и сохраняет данные сеанса на сервере, обычно в базе данных.

Основное преимущество использования cookie-session - когда у вас есть кластерное приложение node.js, тогда вам не нужно полагаться на совместное использование данных сеанса между разветвленными процессами.

Ответ 4

Позвольте мне поделиться важной разницей, которую я нашел: безопасные куки.

У меня есть процесс узла за прокси-сервером nginx, который обрабатывает SSL.

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

Затем я попробовал почти с тем же кодом, но вместо этого с cookie-сессией, что-то вроде

   const expressSession = require('cookie-session')

   var expiryDate = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000); // 7 days

    const session = expressSession({
      secret: sessionSecret,
      resave: false,
      saveUninitialized: true,
      cookie: {
        secureProxy: true,
        httpOnly: true,
        domain: 'example.com',
        expires: expiryDate
      }
    })

    app.use(session)

Я просто изменил require('express-session') на require('cookie-session') и добавил secureProxy: true, все работало из коробки.

Также обратите внимание, что оба пакета поддерживаются expressjs, поэтому, вероятно, в моем случае использования мне посчастливилось узнать, что cookie-сессия соответствует моим потребностям.

Ответ 5

Получите непустой console.log(req.session), вам нужно установить значения сеанса перед регистрацией.

Из репозитория cookie-сессии (https://github.com/expressjs/cookie-session):

app.get('/', function (req, res, next) {
 req.session.views = (req.session.views || 0) + 1
 console.log(req.session)
 res.end(req.session.views + ' views')
})

Если вы никогда не устанавливаете какую-либо информацию для объекта req.session, он вернется пустым.

Ответ 6

v4-> cookie-сессия (Установить сеансы на основе файлов cookie) равна → v3 express.cookieSession

v4-> express-session is (Установить сеансы на основе сервера (только для разработки)). равно в → v3 express.session