Сколько живет кука по умолчанию, если параметры времени жизни не заданы?
Что проверяют
Знаете ли вы, чем сессионная кука отличается от постоянной, и умеете ли проверить это руками, а не по памяти. Тестировщику вопрос задают перед разговором про авторизацию: почти все баги вида «меня разлогинивает» и «я остался залогинен» растут из атрибутов заголовка Set-Cookie.
Как отвечать
Если в Set-Cookie нет ни Expires, ни Max-Age, кука сессионная: браузер держит её в памяти и удаляет при завершении работы, на диск не пишет. Срок задаётся либо Expires с абсолютной датой, либо Max-Age в секундах, и если указаны оба, выигрывает Max-Age. Значение Max-Age=0 или дата в прошлом это способ удалить куку, отдельной команды на удаление в протоколе нет.
Set-Cookie: sid=abc; Path=/; HttpOnly; Secure; SameSite=LaxТакая кука сессионная. Добавьте Max-Age=3600, и она переживёт перезапуск браузера, но не дольше часа.
Что проверять: вкладка приложения в инструментах разработчика показывает срок, у сессионной там будет пометка про сессию. Закрытие вкладки куку не убивает, закрытие всего браузера убивает. Полезно знать и то, что браузеры ограничивают срок сверху: выставленный на десять лет Expires столько не проживёт, Chrome обрезает его примерно до года с небольшим, а Safari заметно урезает куки, выставленные скриптом через document.cookie.
Где спотыкаются
Называют конкретный срок вроде суток, будто у куки есть встроенное значение по умолчанию. Его нет: либо срок задан явно, либо кука живёт до конца работы браузера.
Второе: считают «до закрытия браузера» жёсткой гарантией. Браузеры с восстановлением вкладок возвращают сессионные куки после перезапуска, поэтому проверка выхода из аккаунта через закрытие браузера воспроизводится не всегда, и баг получает статус «не повторяется».
Третье: путают срок жизни куки со сроком жизни серверной сессии. Кука может остаться, а сессия по ней уже протухнуть, и наоборот. Смотреть нужно обе стороны, иначе дефект уедет к разработчику с неверным описанием.