Не устанавливается кука user_key

Добрый день. Столкнулся с проблемой при реализации плагина входа на сайт через OpenId-провайдера.

Написал экшен и модули авторизации и аутентификации, и заметил, что после входа через opened-учетку не устанавливается кука user_key. Без этого после перезапуска браузера приходится авторизовываться заново.

Начал копать.
В экшене авторизации через openId, когда идентификатор пользователя был уже получен, идет следующий код:
if ($oUser = $this->PluginXXX_Openid_GetUserByOpenId($sOpenId)) {
	$this->User_Authorization($oUser);				
	R::Location(Config::Get('path.root.web').'/');
} else {
        ...
}

В системной функции Authorization идет установка нужной куки, т.е. вызывается нужная setcookie(...), но сама кука в браузере не прописывается. При проверке значения устанавливаемой куки не нашел ничего подозрительного — она аналогична той, что устанавливается при входе через учетную запись обычного пользователя.
После авторизации идет редирект на главную страницу, как и в модуле openId для livestreet. В ActionLogin у AltoCMS редирект идет через ajax, но разницы вроде бы нет, да и в моем случае он не применим.

В чем может быть проблема с установкой этой куки? С другими печеньками подобных проблем нет...

Похожие статьи


6 комментариев

0
Как-то не очень понятно: при авторизации кука проставляется, а после редиректа пропадает? И это все на одном домене, без переходов?
0
Нет. На сайте есть возможность авторизовываться через встроенные в движок учетки и через провайдера opened.

Если входить через встроенную учетку — все ОК, кука создается и человек остается залогиненным на долгое время.

Если входить через провайдера, то кука не создается. После перезапуска браузера приходится логиниться еще раз. Принцип работы модуля логина подобный плагину openId для лайвстрит:

1. Жмется кнопка, идет переход на сайт провайдера
2. Дается разрешение на авторизацию на моем сайте
3. Дальше идет переход на кэлбэк урл, где идет проверка регистрировался ли раньше пользователь через этого провайдера. Если да, то идет авторизация на сайте.

Вот в этот момент почему-то не прописывается кука user_key. Т.е. в этот момент все проверки и действия происходят у меня на сайте уже без переходов на другие домены.
0
На днях была похожая проблема — долго не могли понять, почему на одном сайте при подключении плагина не ставится кука. Долго ковырялись, не могли понять, и выяснилось, что один из подгружаемых файлов в кодировке UTF-8 BOM, и из-за этого идет вывод. А при любом выводе куки не устанавливаются.

Могу посоветовать следующее:
1) Обновиться до 1.1.3
2) В начале файла /index.php добавить:
define('DEBUG', 1);
3) А в /app/config.local.php добавить:
$config['sys']['include']['check_file'] = false;

Если какие-то файлы имеют подключаемую кодировку UTF-8 BOM, то увидите сообщения в логе error.log
0
Да, про то, что если перед установкой кук идет какой-то вывод, то она не будет работать, я читал.

Обновиться до 1.1.3 сейчас будет сложно, — с версии 1.0.8 были произведены кардинальные изменения в некоторых частях движка, из-за чего после обновления сайт валится. Надо ковырять, исправлять… Надо как-нибудь все-таки добраться и разобраться, посмотреть в этом ли дело.
0
Тогда попробуйте так: обновите у себя в модуле ModuleSession только метод SetCookie(), взяв его из последней версии движка 1.1.13, и включите константу DEBUG, как сказано выше в п.2

И смотрите логи. Если кука не ставится из-за того, что до этого момента был какой-то вывод, то в логах будет указано, в каком файле и в какой его строке был этот вывод.
0
Похоже, что у вас раньше файл /common/templates/language/actions/admin/en.php был с BOM. Я его не правил, дата стоит оригинальная, а в новой версии этот файл уже без BOM.

Пересохранил файл, кука встала. Спасибо.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.