То, что вы спрашиваете, невозможно, и, честно говоря, не имеет смысла, когда вы понимаете, как работают сессии.Сессия существует только в контексте запроса.HTTP - это протокол без сохранения состояния.Сеансы, по сути, являются ложным состоянием, когда сервер и клиент передают «идентификатор сеанса».Когда сервер хочет установить «сеанс» с клиентом, он выдает клиенту идентификатор сеанса, обычно через заголовок ответа Set-Cookie
.Затем клиент будет передавать этот идентификатор при каждом последующем запросе, обычно через заголовок запроса Cookie
.Когда сервер получает этот идентификатор, он ищет соответствующий сеанс из хранилища, а затем получает доступ к любому состоянию, в котором он был ранее.
Дело в том, что без запроса first ,сервер не знает и не заботится о том, что происходит с определенным сеансом.Часть истечения срока действия происходит, когда сервер затем пытается найти сеанс.Если он был слишком длинным (истек срок действия сеанса), то он уничтожает предыдущий сеанс и создает новый.Он не ведет активный мониторинг сессий, чтобы что-то делать в определенное время.И, как вы заметили, сеансы являются скользящими, каждый запрос в течение срока действия сбрасывает этот период.В результате сеанс никогда не истекает, пока клиент активно его использует.
Длинный и короткий, единственный способ узнать состояние сеанса - это сделать запрос с идентификатором сеанса в порядкепредложить серверу попытаться восстановить этот сеанс.Лучшее, что вы можете сделать, если хотите отслеживать истечение сеанса на стороне клиента, - это установить таймер на стороне клиента на основе известного тайм-аута.Затем вам необходимо сбросить указанное время при каждом последующем запросе.
var sessionTimeout = setTimeout(doSomething, 20 * 60 * 1000); // 20 minutes
Затем в ваших обратных вызовах AJAX:
clearTimeout(sessionTimeout);
sessionTimeout = setTimeout(doSomething, 20 * 60 * 1000);