Repository navigation
Web API: CORS OPTIONS без сессии MODX в БД - #725
Conversation
|
Проверил на живом MODX 3 (dev-сайт, Блокер: опция попадает в кэш контекста
$results['config'] = array_merge($results['config'], $options);— и результат пишется в Воспроизведение на dev с файлами PR:
То есть на проде один preflight после сброса кэша ломает сессии — авторизацию покупателей, всё, что хранится в Что предлагаюНе передавать ничего через опции if (strtoupper((string) ($_SERVER['REQUEST_METHOD'] ?? '')) === 'OPTIONS') {
$_SESSION = [];
}
$modx->initialize('web');Проверка состояния стоит внутри условия про
Заодно отпадает перенос ТестТекущие тесты проверяют, что |
Mark $_SESSION before initialize so getSessionState is EXTERNAL. Do not pass session_enabled into initialize — it is merged into context.cache.php on a cold cache and disables sessions site-wide.
5eda377 to
577e724
Compare
|
@biz87 Спасибо — блокер подтверждён. Tip перебазирован на Исправление: перед Тесты: smoke + unit на Smoke + unit — ok. |
Описание
Каждый CORS
OPTIONSкapi.phpподнималmodX::initialize('web')с сессией. Браузер не шлёт cookie на preflight, поэтому каждый запрос писал новую строку вmodx_session.Для
OPTIONSинициализация идёт сsession_enabled => false. До этого снимаются$_GET['preview']и$_REQUEST['preview'], иначе ядро всё равно стартует сессию. Логика вынесена вWebApiModxBootstrap. CORS-контракт роутера и middleware не менялся.Тип изменений
Связанные Issues
Closes #720
Связано с #634 / #637 / #706 / #708 / #718.
Как это было протестировано?
Ручная проверка счётчика сессий (staging,
session_handler_class = modSessionHandler):В ответе preflight не должно быть
Set-Cookie: PHPSESSID=….composer test:smoke, unit bootstrap)Конфигурация тестирования:
fix/issue-720-options-no-sessionотbetasession_enabled/previewв_initSession)Скриншоты (если применимо)
Чеклист
composer stan/ CI jobPHPStan)npm run lint:ciдля Vue) — Vue не трогалиДополнительные заметки
HeadlessStorefrontErrorsTestвоспроизводятся на чистомorigin/betaи к этому PR не относятся.