Поддерживать сеанс в рабочем состоянии после закрытия браузера — Node.js клиентские сеансы

#node.js #session #session-cookies

#node.js #сеанс #сеанс-файлы cookie

Вопрос:

У меня есть следующий код диспетчера сеансов, настроенный в node.js

 app.use(function(req, res, next) {  
  if (req.session amp;amp; req.session.id) {
    DB.FindUser(req.session.id, function(err, id) {
      if (err) throw err;
      if (id) {
        res.setHeader('X-Seen-You', 'true');
        next();
      }else{
        res.json({code : 100, status : false, msg :"Error in connection database"});
      }      
    });
  } else {    
    DB.AddUser({ sessionId: Helper.GUID(), ip: req.headers.origin}, function(err, id){
      if(id){
        req.session.id = id;
        res.setHeader('X-Seen-You', 'false');
      }
      next();
    });
  }
});
  

При первой отправке запроса создается новый сеанс, сохраняется в БД и отправляется файл cookie клиенту.
При последующих повторных запросах сеанс все еще активен и находит идентификатор.

Но если я закрою браузер и снова открою, файл cookie не будет отправлен с клиента.

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

 app.use(sessions({
  cookieName: 'session',
  secret: Helper.GUID(),
  duration: 30 * 24 * 60 * 60 * 1000, //(1 month)
  activeDuration: 30 * 24 * 60 * 60 * 1000 //(1 month)
}));
  

Дополнительная информация —
Мой клиент из другого домена. Я добавил функциональность CORS:

 app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', 'http://127.0.0.1:8000');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});
  

И в моем коде AngularJS добавлено значение withCredentials:

 clinetApp.config([
    '$httpProvider',
    function($httpProvider) {
        $httpProvider.defaults.withCredentials = true;
    }
]);