Подрядчик перенёс сессии в быструю память — Redis или Memcache — «чтобы витрина летала». Утром гость собирает корзину, уходит к кассе — пусто. В студии человек уже вписал имя и телефон в форму записи, обновил страницу — поля чистые. Заявка ещё не визит и не оплата, но доверие уже нет. Владелец слышит «ускорили» и не связывает пустую корзину с ночной очисткой памяти.
Вечный спиннер мини-корзины, пока страница не отпустила файл сессии — другая поломка: вкладка ждёт сама себя. Здесь спиннера может не быть. Состав просто исчезает. Диск при этом свободный. PHP живой. Человек пишет «вас взломали» или «сайт стёр заказ».
Проблема
Страх медленной витрины: сессии на диске рядом с фото «тормозят». Жажда зелёного отчёта: быстрая память в чек-листе хостера. Стыд оставить «как было», когда сосед уже на Redis. На Битриксе блокнот гостя держит корзину, город, черновик формы. Его можно хранить в файле, в базе или в памяти. Память быстрее. Она же забывает, если её сбрасывают вместе с кешем страниц, если срок жизни пятнадцать минут, если два фронтенда смотрят в разные инстансы.
Композит (сохранённый каркас витрины) корзину как раз рисует живым куском из этого блокнота. Каркас приехал, состав пустой — гость видит шапку без своих пар. TTFB (сервер начал отвечать) короткий. Касса мёртвая.
Причина
Выкладка шаблона или «почистить кеш» делает flush всей памяти: вместе с копиями страниц уезжают сессии. Лимит памяти инстанса полный — вытесняют старые ключи, в том числе корзину человека, который выбирал полчаса. Префикс ключей совпал с кешем компонента: сброс раздела убивает гостей. Два сервера за балансировкой без общей памяти — чётный запрос видит корзину, нечётный нет. В студии то же на многошаговой записи: первый экран жив, второй уже без имени.
- Срок жизни сессии короче, чем путь «каталог → карточка → касса» или «услуга → форма → подтверждение».
- Ночной агент «очистить кеш» бьёт тот же инстанс, что блокноты гостей.
- Тестовый и боевой магазин делят один Memcache — сброс теста чистит бой.
- После переезда на два PHP-фронта сессии не перенесли: утро пустых корзин.
LCP (когда появилось главное фото) и INP (кнопка отозвалась) могут быть зелёными. Человек добавил товар, кнопка ответила, фото на месте. Через минуту шапка без состава. Это не «медленный сайт». Это забывчивая память.
Решение
- Выписать, где лежат сессии: файл, база, Redis, Memcache. Отдельно — куда бьёт кнопка «очистить кеш» в админке.
- Гостем собрать корзину из трёх позиций и черновик заявки в студии. Подождать дольше объявленного срока жизни ключа. Обновить. Состав и поля должны остаться.
- На копии нажать сброс кеша страниц. Корзины боевых гостей на копии не должны уехать вместе с HTML.
- Если два фронтенда — один инстанс памяти или липкая сессия. Два окна, два состава, без перемешивания.
- Выкладку шаблона проводить без flushall по всем ключам. Сессии и кеш страниц — разные префиксы.
Проверка
Не возвращают сессии на переполненный диск «чтобы было как раньше», пока не развели ключи. Не лечат обнуление увеличением OPcache: разобранные файлы PHP блокнот гостя не хранят. Не винят покупателя, что «не нажал оформить быстрее». Записывают: где сессии, какой срок, что делает сброс кеша, живы ли три позиции и черновик заявки через час. Останавливаются, когда выкладка и уборка копий не обнуляют гостя. Иначе следующий «разгон» снова сотрёт кассу ночью.
Чек-лист
- Выписать, где лежат сессии: файл, база, Redis, Memcache. Отдельно — куда бьёт кнопка «очистить кеш» в админке.
- Гостем собрать корзину из трёх позиций и черновик заявки в студии. Подождать дольше объявленного срока жизни ключа. Обновить. Состав и по…
- На копии нажать сброс кеша страниц. Корзины боевых гостей на копии не должны уехать вместе с HTML.
- Если два фронтенда — один инстанс памяти или липкая сессия. Два окна, два состава, без перемешивания.
- Выкладку шаблона проводить без flushall по всем ключам. Сессии и кеш страниц — разные префиксы.
Назад в раздел
