2016-08-31 4 views
2

Мне сложно понять роль файла cookie, который сгенерирован в пакете express-session.Экспресс-сессия Управление Cookie

Таким образом, в приведенном ниже коде:

var session = require('express-session') 
var store = require('session-file-store')(session) 

app.use(session({ 
    name: 'session-id', 
    secret: 'sdafjlkdashf34khrjke' 
    saveUninitialized: true, 
    resave: true, 
    store: new Store() 
}) 

func auth (req, res, next) { 
    if (!req.session.user) { 
     req.session.user = 'admin' 
     next() 
    }else { 
     console.log(req.session) 
    } 
} 

app.get('/', function (req, res) { 
    res.send('Hello World!'); 
}); 

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

Так по существу в простом фрагменте кода выше, всякий раз, когда пользователь делает запрос к серверу (например, это: localhost:3000/) 3 вещи будут происходить:

  1. Новый объект сеанса будет создан для этого конкретного клиента.
  2. В этом новом сеансовом объекте куки-файл будет автоматически прикреплен для этого конкретного клиента.
  3. Наконец, поскольку я использую хранилище session-файлов, ТОЛЬКО информация о файлах cookie (а не объект сеанса) будет сохранена в папке session на моей локальной машине.

Итак, скажем, 50 файлов cookie хранятся в папке session, так как 50 клиентов сделали запрос на мой сервер.

Так что мой вопрос, когда один из этих 50 пользователей делает еще один запрос на мой сервер, как это express-session знать, какие куки объект (из папки session), чтобы выбрать и прикрепить к req объекту для использования в коде.

+0

Хорошо, поэтому после ряда исследований я понял, что когда конкретный клиент (скажем, ваш браузер) делает запрос на мой сервер, то на основе домена клиента (другими словами, IP-адрес, я думаю? Кто-то может исправить меня здесь, в каком домене) сервер знает, какой файл cookie принадлежит этому клиенту. Подробнее объясняется здесь: http://stackoverflow.com/questions/8805958/how-browsers-know-what-cookies-to-send-to-server-when-requesting. – LP496

ответ

0

Объект Session - это обычный объект JavaScript, в котором вы можете хранить (разумно) общую информацию для определенного сеанса.

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

Вот пример печенья, который получает набор для меня:

set-cookie: session-id=s%3AvdD2a8WqJD3R5L5UjZ_oWDkWMVbEa8UF.%2BXjKW6hIaX%2FfDAJm2lSZrEJ0xFigoeHjru1rZT7Na0E 

Он состоит из четырех частей (I URL-декодируют их для ясности):

  • s:: префикс задается express-session к указать, что файл cookie сеанса подписан;
  • vdD2a8WqJD3R5L5UjZ_oWDkWMVbEa8UF: уникальный идентификатор. Если вы посмотрите в каталоге, где хранятся сеансы, вы найдете JSON-файл под этим именем;
  • .: разделитель между идентификатором сеанса и сигнатурой;
  • +XjKW6hIaX%2FfDAJm2lSZrEJ0xFigoeHjru1rZT7Na0E: подпись печенья (для предотвращения несанкционированного доступа);

Таким образом, сам файл cookie не содержит информации о сеансе, это все хранится в файле.

Вот пример файла сеанса:

{ 
    "cookie": { 
    "originalMaxAge": null, 
    "expires": null, 
    "httpOnly": true, 
    "path": "/" 
    }, 
    "value": 1472628829554, // this is a value I stored in the session 
    "__lastAccess": 1472628829557 
} 

Домен, с точки зрения печенье, значит, какой домен (или сайт) печенье принадлежит. Если example.com устанавливает файл cookie, файл cookie привязан к этому домену и будет отправлен на этот веб-сайт.Однако это не имеет никакого отношения к идентификации клиента, отправившего cookie, это работа идентификатора сеанса.

Смежные вопросы