Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 9 Ответов
  • 11493 Просмотров
*

Soko1off

  • Новичок
  • 3
  • 0 / 0
Доброго времени суток. Облазил пол интернета так и не нашёл решения свой проблемы.

Как можно принудительно закрыть сессию для пользователя? Есть сайт на Joomla 3.1.5, часто бывает такое что пользователи дают свои пароли посторонним людям на время, например на 1 день, когда они авторизируются они ставят галочку "Запомнить меня", и получается что сессия будет вечна, пока он не почистит куки, даже если сменил пароль. Может есть какой-то способ реализовать что-то наподобие "Завершить все сеансы" как это сделано ВКонтакте. Или чтобы всех выкидывало когда меняется пароль. Либо может можно как-то с админ панели это делать... Буду благодарен за любые мысли.

p.s. Убрать возможность вечной авторизации не вариант.
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Оу да все очень просто!
Пишем плагин для юзеров! Подвязваемся на метод onUserAfterSave в нем пишем что то типа:

Код: php
public function onUserAfterSave( $data, $isNew, $result, $error )
{
if ( !$isNew ) {
$userId = JArrayHelper::getValue( $data, 'id', 0, 'int' );
$db = JFactory::getDbo();
$query = $db->getQuery( true )->delete( '#__session' )->where( 'userid=' . $userId );
$db->setQuery( $query )->execute();
}
}
Теперь при сохраненнии пользователя будет удалятся запись где запомнена аутентефикация ) дальше вам всеголишь надо ввести алгоритм что бы не выкидывало владельца при сохранении каких либо данных )
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Как можно принудительно закрыть сессию для пользователя. Вроде так
Код: php-brief
JFactory::getApplication()->logout();
*

Soko1off

  • Новичок
  • 3
  • 0 / 0
На сколько я понял здесь удаляется запись из базы данных для конкретного пользователя, но когда я пробовал разные варианты, и вручную удалял из базы данных запись с таблицы сессий, то это не давало никаких результатов... я так понимаю сессии хранятся где-то в файлах....
Оу да все очень просто!
Пишем плагин для юзеров! Подвязваемся на метод onUserAfterSave в нем пишем что то типа:

Код: php
public function onUserAfterSave( $data, $isNew, $result, $error )
{
if ( !$isNew ) {
$userId = JArrayHelper::getValue( $data, 'id', 0, 'int' );
$db = JFactory::getDbo();
$query = $db->getQuery( true )->delete( '#__session' )->where( 'userid=' . $userId );
$db->setQuery( $query )->execute();
}
}
Теперь при сохраненнии пользователя будет удалятся запись где запомнена аутентефикация ) дальше вам всеголишь надо ввести алгоритм что бы не выкидывало владельца при сохранении каких либо данных )
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
$config = JFactory::getConfig();
$cookie_domain = $config->get('cookie_domain', '');
$cookie_path = $config->get('cookie_path', '/');
$cookie_name = JUserHelper::getShortHashedUserAgent();
setcookie($cookie_name, false, time() - 42000, $cookie_path, $cookie_domain);
пример кода есть в плагине группы user ->Joomla
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Кукисы надо тереть. Я к сожалению в этом не силен.
Вот только все это странно, я тру у себя сессии и сразу выкидывает на авторизацию, если человек трет из базы запись с сессией и ничего не происходит может и авторизация там левая? и хранится как то по другому?
Ведь в стандарке в куке храниться хеш авторизированного пользователя, который по сути ключ в таблице #__session! нет соответствующей записи в таблице #__session то и авторизация не произойдет..
*

Soko1off

  • Новичок
  • 3
  • 0 / 0
Вроде ничего левого не ставил с вязаного с пользователями, в плагинах стоит включённым стандартный плагин "Пользователь - Joomla! user joomla", правда выключен "Пользователь - Профиль user profile" но я думаю он тут не причём, в настройках стоит обработчик сессий "База данных", время жизни 15 минут. Только что ещё раз проверил, авторизируюсь на сайте, в таблице сессий появляется моя запись, я её удаляю, на сайте перехожу на любую страницу, и в базе появляется опять моя запись с тем же хешом. На сайте стоит компонент "Akeeba Subscriptions", там есть свой профиль пользователя, но я думаю вряд ли он что-то меняет..
Вот только все это странно, я тру у себя сессии и сразу выкидывает на авторизацию, если человек трет из базы запись с сессией и ничего не происходит может и авторизация там левая? и хранится как то по другому?
Ведь в стандарке в куке храниться хеш авторизированного пользователя, который по сути ключ в таблице #__session! нет соответствующей записи в таблице #__session то и авторизация не произойдет..
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
*

ELLE

  • Глобальный модератор
  • 4510
  • 893 / 0
На сайте стоит компонент "Akeeba Subscriptions", там есть свой профиль пользователя, но я думаю вряд ли он что-то меняет..
Вот как раз это из-за "Akeeba Subscriptions", я тоже заметила такое. На сайте, где его нет, все нормально
Надо поковырять, походу какой-то из плагинов его так работает
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как закрыть отдельные публикации для определенной страны со своим сообщением?

Автор Sponsor

Ответов: 1
Просмотров: 340
Последний ответ 19.03.2023, 13:04:35
от stepan39
Менеджер шаблонов: не работают кнопка "Сохранить" "Закрыть" и тд

Автор darkghost

Ответов: 2
Просмотров: 500
Последний ответ 22.11.2021, 21:14:11
от darkghost
Как закрыть от просмотра?

Автор tmpnikl

Ответов: 5
Просмотров: 440
Последний ответ 07.04.2021, 18:40:10
от IToro82
Закрыть доступ к сайту с адресов конкретного провайдера, как?

Автор x1

Ответов: 2
Просмотров: 961
Последний ответ 29.03.2021, 12:48:23
от x1
Как принудительно изменить md5 хэш в строке загрузки скриптов/стилей?

Автор Finch

Ответов: 4
Просмотров: 523
Последний ответ 14.02.2020, 12:18:46
от Finch