Какая разница между saveUninitialized и resave?

Средство промежуточного уровня сеанса для Express предоставляет несколько настраиваемых параметров.

resave: 'Заставляет сеанс быть сохранен обратно в хранилище сеансов, даже если сеанс никогда не изменялся во время запроса.'

saveUninitialized: 'Заставляет сеанс, который не инициализирован, сохраняться в хранилище. Сеанс не инициализируется, когда он новый, но не изменен. '

Кажется, что оба варианта предназначены для сохранения немодифицированных сеансов. Какая разница?

Ответ 1

Я думал, что начну с базового ответа, до сих пор понимаю, и улучшу его. Важный вопрос был "мертвым" слишком долго.

Из this Я понимаю, что разница заключается в следующем:

(Unmodified 'state' отличается от неинициализированного состояния)

resave: для любого сделанного запроса

  • Ничего в сеансе не нужно менять (нет входа и т.д.).
  • Изменение требуемого сеанса (вход в систему)

"Заставляет сеанс сохранять даже при немодифицированном"

saveUninitialized. О состоянии сеанса, если он все еще находится в неинициализированном состоянии.

  • Не изменяется только, ничего в сеансе не нужно изменять (нет входа и т.д.).

"Заставляет сеанс, который не инициализирован, сохраняться в хранилище. Сеанс не инициализируется, когда он является новым, но не изменен."

Ответ 2

В принципе, сеанс сохраняется в хранилище только при его изменении; если вы добавите, удалить или отредактируйте файл cookie сеанса (например: req.session.test = 'some value'). Если вы хотите, чтобы все сеансы сохранялись в магазине, даже если они не имеют каких-либо изменений, перейдите к saveUninitialized: true.

Теперь повторное сохранение также происходит только при изменении переменных сеанса/файлов cookie. Если вы хотите сохранить, всегда продолжайте resave: true