#express #authentication #redis #session-cookies #express-session
Вопрос:
Я использую express-session, connect-redis и ioredis для хранения сеанса, и у пользователя будет ключ redis, сохраненный в файле cookie браузера. connect-redis сбрасывает TTL каждый раз при взаимодействии с сервером, что означает, что прямо сейчас с настройками по умолчанию сеанс в памяти переживет файл cookie браузера в какой-то момент, когда пользователь взаимодействует с веб-сайтом. Я хотел бы сохранить сеанс пользователя живым и не показывать всплывающее окно пользователю, указывающее, что они должны пройти повторную аутентификацию или что они скоро выйдут из системы или что-то в этом роде. Как крупные сайты, такие как YouTube и Facebook, поддерживают сеансы пользователей? Я думаю, что уже много лет я никогда не испытывал внезапной потребности в повторной проверке подлинности на YouTube. Поэтому мой вопрос заключается в том, как следует обрабатывать даты истечения срока действия сеанса cookie с акцентом на хороший пользовательский интерфейс и не жертвовать безопасностью?
Моя текущая идея состоит в том, чтобы просто проверить, когда есть определенное количество времени, равное времени, оставшемуся до истечения срока действия файла cookie, и если это окажется правдой, и пользователь только что взаимодействовал с веб-сайтом, сбросьте свойство maxAge в файле cookie. Таким образом, если пользователь не собирается взаимодействовать с веб-сайтом более определенного промежутка времени, скажем, 3 месяца, а время, оставшееся до истечения срока действия файла cookie, составляет ровно 3 месяца, пользователь выйдет из системы в следующий раз, когда пользователь посетит сайт после этих 3 месяцев. Другими словами, до тех пор, пока пользователь продолжает что-то делать на веб-сайте с интервалом менее 3 месяцев, он всегда будет входить в систему и проходить аутентификацию. Что ты об этом думаешь? Я также мог бы установить для rolling
свойства значение true, но я не хочу отправлять файлы cookie сеанса при каждом аутентифицированном запросе из-за соображений производительности. Кроме того, я не могу писать в файл cookie, пытаясь увеличить срок его действия с помощью Javascript на стороне клиента, так как я устанавливаю httpOnly
значение true.