Форум русской поддержки Joomla!® CMS
05.12.2016, 20:41:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

"Remember me" неправильно работает в Opera

 (Прочитано 171 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dmitry_stas
Профи
********

Репутация: +796/-4
Offline Offline

Сообщений: 7759



« : 20.09.2015, 13:27:28 »

Исходные данные: в Opera периодически слетает аутентификация юзера, несмотря на то, что Запомнить меня исправно отмечается при логине.

Описание логики: плагин пытается найти файл кук с информацией о данных юзера для логина. Имя этого файла отдает JUserHelper::getShortHashedUserAgent()
Код
public static function getShortHashedUserAgent()
{
$ua = JFactory::getApplication()->client;
$uaString = $ua->userAgent;
$browserVersion = $ua->browserVersion;
$uaShort = str_replace($browserVersion, 'abcd', $uaString);
 
return md5(JUri::base(). $uaShort);
}
 

Описание проблемы: как видно из вышеприведенного кода, имя файла генерируется как md5 из адреса сайта и заголовка userAgent браузера юзера, в котором версия браузера заменена на строку 'abcd'. Эта замена сделана для того, чтобы обновление браузера не влияло на генерацию, и возвращаемое значение было одинаково не зависимо то того, 19-я версия или 30-я. Однако, Opera Azn В Opera мы имеем вот такую штуку:
Цитата: print_r($ua)
JApplicationWebClient Object ( [platform:protected] => [mobile:protected] => [engine:protected] => [browser:protected] => 19 [browserVersion:protected] => 45.0.2454.85 [languages:protected] => Array ( ) [encodings:protected] => Array ( ) [userAgent:protected] => Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.31 [acceptEncoding:protected] => gzip, deflate, lzma, sdch [acceptLanguage:protected] => ru,en-US;q=0.8,en;q=0.6,uk;q=0.4,pl;q=0.2 [robot:protected] => [detection:protected] => Array ( [browser] => 1 ) )
Т.е. в userAgent содержится 2 версии - Cromium и собственно Opera, и при обновлении меняются обе. А заменяется на 'abcd' только одна - та, которая содержится в browserVersion. Из-за этого getShortHashedUserAgent() после обновления Opera возвращает уже другое значение, и файл куков не находится. И как следствие - сабж.

Вариант решения: сделать имя файла не зависящим от браузера, например
Код
public static function getShortHashedUserAgent()
{
return md5(JUri::base(). JFactory::getConfig()->get('secret'));
}
 

P.S. Если есть кто зарегистрированным на багтрекере Joomla, можно внести предложение.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet