HTTP, cookie и сессии
Веб-приложение на Битриксе опирается на стандартную механику HTTP: методы, статус-коды, заголовки, cookie и блокировки сессий. Понимание жизненного цикла запроса и ответа избавляет от ошибок при отдаче чистого JSON в AJAX-обработчиках и проблем с сессиями при параллельных запросах.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Запрос и ответ, методы, коды статусов
-
2
Заголовки, cookie, сессии
-
3
Кеширование на уровне HTTP
-
4
Как браузер загружает страницу
Материалы
Официальная документация
Проверь себя
AJAX-обработчик возвращает JSON, но фронтенд получает HTML шапки сайта перед ним. Почему?
Обработчик подключил /bitrix/header.php вместо служебного пролога /bitrix/modules/main/include/prolog_before.php, и в ответ ушёл шаблон сайта. Второй вариант — забытый $APPLICATION->RestartBuffer() перед выводом.
Заказчик пишет: «залогинился на www.site.ru, перешёл на site.ru — снова гость». Где причина?
В домене cookie. Cookie авторизации выставлена для одного хоста, браузер не отправляет её на другой. Смотреть заголовок Set-Cookie в DevTools и настройки домена сайта, а не код авторизации.
Почему cookie, добавленная через $response->addCookie() в этом же хите, не читается через $request->getCookie()?
Cookie уходит клиенту в заголовке ответа и вернётся только со следующим запросом. В текущем запросе её ещё нет — это протокол, а не баг ядра.
Страница с десятком параллельных AJAX-запросов у одного пользователя отвечает по очереди, а не сразу. При чём тут HTTP?
Сессия PHP блокируется на время хита, и запросы одного пользователя ждут друг друга. Для читающих обработчиков помогает константа BX_SECURITY_SESSION_READONLY до подключения ядра, но тогда сессия в этом хите не сохранится.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить