Веб-приложение для ВК на Laravel, Nginx, PHP-FPM. Посетитель приходит с ключом в GET-параметрах, сервер проверяет валидность ключа, и если ключ валидный, записывает какие-то данные в сессию и отдаёт HTML главной страницы динамического приложения. Далее с клиента поступают Ajax-запросы, и перед выполнением каждого фильтр авторизации проверяет, есть ли в сессии определённые данные.
Сессии PHP держатся на куки. Но, как выяснилось, в редких случаях у людей не поддерживаются куки, и последующие Ajax-запросы приходят без куки.
Ладно, зато они приходят с указанием реферера – основной страницы, включая все GET-параметры. По ним тоже можно быстро проверить валидность запроса.
Теперь выяснилось, что ещё есть редкие индивиды, у которых и это не срабатывает! Свежий Chrome, возможно, какие-то настройки приватности, или режим Incognito, или расширение блокирует и куки, и реферера.
Как держать сессии в таком случае?
Костыль (?) планирую пока такой: в первом авторизованном GET-параметрами запросе отдавать в странице какой-то уникальный ключ сессии и добавлять его при каждом Ajax-запросе для подтверждения валидности запроса. Так должно работать, но сомневаюсь, что это «белое», «правильное» решение.
Как правильно держать сессию, когда клиент не хочет ни куки, ни реферера светить?
Для отправки с использованием jQuery
, насколько я помню надо добавить параметр:
$.ajax( {
/* Setup the call */
xhrFields: {
withCredentials: true
}
});
А лучше, если вы знакомы с REST API
то там для аутентификации используются токены, посылаемые каждый раз в теле запроса. Это наиболее правильный подход.
И это не костыль, а подход используемый всеми при работе с AJAX
и REST
. По мне так сессии на основе куки это костыль для протокола HTTP
, который изначально без сохранения состояния.
Только надо обязательно серьезно продумать аутентификацию по токенам и привязать как минимум к IP
адресу.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Это использование паттерна "Фабрика", прошу помощи понять, правильно ли я его использую
Как при соответствующем ответе от пхп файла остановить отправку формыСейчас форма отправляется в любом случае