Я собирался добавить это в качестве комментария к отличному ответу Александра, но он получит немного многословно.
Как долго cookie сохраняется в браузере и как долго данные сеанса хранятсясервер при отсутствии запроса - это 2 отдельные и независимые вещи.Невозможно избежать этого из-за природы HTTP без состояния - хотя есть некоторые вещи, которые вы можете сделать, чтобы смягчить то, что вы воспринимаете как недостаток безопасности.
Для браузера, чтобы получить доступ к тому же сеансу после закрытиявыключен и требует некоторой задержки, чтобы браузер сохранял оба файла cookie сеанса (что Александр уже объяснил) и , чтобы сервер сохранил данные сеанса.
Поведение, которое вы описываетеможет быть гораздо более выраженным в системах, обрабатывающих малый объем запросов, и когда обработчик сеанса не проверяет TTL данных сеанса (я не уверен, что это делают обработчики по умолчанию или они просто предполагают, что любые необработанные данные сеансасчитается текущим).
Вы не предоставили никакой информации о том, как настроены 2 сервера, в частности, session.gc_maxlifetime.
Если время сеанса session.gc_maxlifetime истекло между запросами, но данные сеанса по-прежнему доступны, это означает, что обработчик сеанса просто рассматривает это как время, когда сеанс считается пригодным для сбора мусора (что семантическидля чего нужен вариант конфигурации).Однако есть веские основания рассматривать это значение как TTL.Чтобы решить эту проблему, вы можете либо заставить сборщик мусора запускаться чаще и удалять данные сеанса, либо использовать обработчик сеанса, который игнорирует данные сеанса старше указанного предела.
что вы видите разницу между двумя системамиможет быть связано с различными значениями для session.gc_maxlifetime или с различиями в частоте сборки мусора или даже с разными обработчиками сеанса.