[xLike] 1.1.2 Работа с отключенными сессиями для анонимов и поддержка IPv6
Если вам, как и мне, нужно ограничивать анонимов в сессиях, чтобы таблица с сессиями не заполнялась на несколько тысяч записей за 10 минут, то вместе с этим вам придётся столкнуться с некоторыми трудностями. Например, когда в сессию пишутся параметры сниппета для проброса их в какой-нибудь action.php, чтобы не делать этого прямиком через фронтенд.
Отключив сессии для анонимов на сайте, xLike перестал корректно работать, выдавая ошибку при попытке проголосовать. Происходит это, потому что session_id в нём играл основную роль для идентификации юзера, даже при включённой проверке по IP. А проблема заключалась как раз в том, что сниппет xLike пишет в сессию свои параметры, которые необходимы в момент установки голоса пользователем.
Встаёт вопрос, как передавать параметры сниппета в процессоры установки голоса, чтобы на фронте их нельзя было подменить (ну мало ли). Пришла идея криптовать их каким-нибудь openssl_encrypt, а через фронт передавать только закодированную строку, раскодируя её в нужный момент при установке голоса.
Сказано – сделано! Встречайте новую версию xLike, работающую на сайтах с отключёнными сессиями для гостей. Для настройки ничего делать не надо, работает из коробки. Кстати, вместе с этим был исправлен баг с проверкой IPv6 клиентов. Если у кого осталась проблема с поддержкой IPv6, надо переустановить компонент в менеджере пакетов, чтобы в таблице modx_xl_votes поле ip стало varchar(44).
P.S. Если возникнут какие-то проблемы после обновления – пишите об этом под данным топиком.
Отключив сессии для анонимов на сайте, xLike перестал корректно работать, выдавая ошибку при попытке проголосовать. Происходит это, потому что session_id в нём играл основную роль для идентификации юзера, даже при включённой проверке по IP. А проблема заключалась как раз в том, что сниппет xLike пишет в сессию свои параметры, которые необходимы в момент установки голоса пользователем.
Встаёт вопрос, как передавать параметры сниппета в процессоры установки голоса, чтобы на фронте их нельзя было подменить (ну мало ли). Пришла идея криптовать их каким-нибудь openssl_encrypt, а через фронт передавать только закодированную строку, раскодируя её в нужный момент при установке голоса.
Сказано – сделано! Встречайте новую версию xLike, работающую на сайтах с отключёнными сессиями для гостей. Для настройки ничего делать не надо, работает из коробки. Кстати, вместе с этим был исправлен баг с проверкой IPv6 клиентов. Если у кого осталась проблема с поддержкой IPv6, надо переустановить компонент в менеджере пакетов, чтобы в таблице modx_xl_votes поле ip стало varchar(44).
P.S. Если возникнут какие-то проблемы после обновления – пишите об этом под данным топиком.
Поблагодарить автора
Отправить деньги
Комментарии: 5
Пришла идея криптовать их каким-нибудь openssl_encrypt, а через фронт передавать только закодированную строку, раскодируя её в нужный момент при установке голоса.Интересный выход из ситуации. Надо будет запомнить, может где-то пригодится.
Я бы, наверное, записывал массив, например, в кеш, а с фронтенда передавал ключ кеша. Но было бы большое количество файлов, вместо кучи записей в таблице сессий)
Решил обойтись без кучи файлов, там итак кеш-файлов хватает)
странно, как можно установить anonymous_sessions = 0, ведь при этом пропадает возможность залогиниться в систему? ещё с 2016 года)
github.com/modxcms/revolution/issues/12983
github.com/modxcms/revolution/issues/12983
Для контекста web добавив эту настройку, например.
А можно прикрутить к голосованию sms капчу, например ставишь лайк, пишешь свой мобильный номер телефона и приходит смс ты вводишь код и лайк засчитывается
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.