Открытие ссылок из внешних программ - глюки с номерами сессий

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Открытие ссылок из внешних программ - глюки с номерами сессий

Сообщение TM123 »

Есть приложение на Yii 2, оно отправляет по почте ссылки на себя, чтобы открыть ссылку, надо иметь авторизацию, если авторизации нет, то происходит запоминание returnURL, переадресация на форму авторизации и после удачной авторизации происходит переход на изначальную ссылку.

Все прекрасно работало много лет, но недавно развалилось. Если в адресе браузера набрать адрес, то все отработает как надо, если ссылку открыть из почтового web клиента, все точно так же работает, но если клик на ссылку происходит в одном приложении, а открытие ссылки происходит в другом приложении, то если авторизация есть происходит открытие страницы по умолчанию, если нет, то сначала авторизация, а потом страница по умолчанию.

Потрассировал что происходит на сервере, озадачен и поставлен в тупик.

1. Сначала прилетает запрос на соот. страницу, при этом в куки непонятно откуда, как и где взятый идентификатор сессии, при этом в куках нет вообще больше ничего, при этом это не когда-то не пойми когда запомненный идентификатор, потому что недавно в php.ini меняли имя куки для хранения session_id и имя там новое. Т.к. нет ничего, авторизация не признается и происходит переадресация на страницу с формой логина, пока идет все нормально, за исключением того, что куки не те,что сейчас установлены в браузере.
2. Открывается страница с формой логина, прилетает та же самая session_id, в файле сессии запомнен returnURL, все пока идет хорошо.

А теперь начинается цирк!!!

3. Браузер вызывает еще раз страницу с формой логина, но присылает текущую установленную seesion_id, не ту что в предыдущих пунктах, присылает csrf ключ и все остальные куки, которые должен был прислать. Yii смотрит на все это, признает авторизацию, считает что это авторизованный пользователь и на форме логина ему делать нечего, поэтому делает переадресацию, но т.к. returnURL остался в сессии из предыдущих пунктов, а в текущей сессии никаких returnURL не установлено, то производит переход на страницу по умолчанию.

Описанное происходит вне зависимости в какой внешней программе делается клик на ссылку и в каком браузере происходит его открытие, визуально есть небольшие отличия на клиенте, но трассировка на сервере всегда одна и тажа, при этом если это же письмо/ссылку открыть в web клиенте почтового ящика открытом в браузере, например, yandex или mail, то правильные куки прилетают сразу и все работает нормально.

Проверил не глюки ли это Yii или мы что-то развалили в перекрытах родных классах Yii. Написал на чистом PHP запись трассировки в файл и следом die, картина ровно та же самая, открытие ссылки с тем же самым кривым session_id и следом тут же открытие той же самой страницы с нормальными куками.

Идей как бороться с этим нет никаких, кто-то сталкивался с таким, может есть мысли как победить или хотя бы почему браузеры открывают ссылку как бы в учебном режиме с кривыми данными, идут по всем переадресациям, а когда они закончились, открывают последнюю ссылку уже по настоящему с текущим своим состоянием.
Ответить