Emix12 Опубликовано 7 мая, 2018 Поделиться Опубликовано 7 мая, 2018 Добрый день, проблема заключается, в том что на версии ipb 4.2.8 работало все хорошо, после того как обновились до 4.3 после обновлен до 4.3.1 была замечена проблема с сессиями, после авторизации на форуме через steam, (единственный метод авторизации Sign in through Steam 2.0.4, стандартный метод выключен), после того как закрыть страницу, и подождать некоторое время 30-60 минут, авторизация слетает как с Redis так и без него, то есть меняется ips4_IPSSessionFront как решить проблему? 1 минуту назад, Emix12 сказал: Добрый день, проблема заключается, в том что на версии ipb 4.2.8 работало все хорошо, после того как обновились до 4.3 после обновлен до 4.3.1 была замечена проблема с сессиями, после авторизации на форуме через steam, (единственный метод авторизации Sign in through Steam 2.0.4, стандартный метод выключен), после того как закрыть страницу, и подождать некоторое время 30-60 минут, авторизация слетает как с Redis так и без него, то есть меняется ips4_IPSSessionFront как решить проблему? P.S. Версия PHP 7.2.3, Mysql 5.7.22, Ubuntu 18.01 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Emix12 Опубликовано 7 мая, 2018 Автор Поделиться Опубликовано 7 мая, 2018 Странно конечно, тут почему то сессия не слетает Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Emix12 Опубликовано 7 мая, 2018 Автор Поделиться Опубликовано 7 мая, 2018 Проблема решена, проблема заключается во времени жизни сессии!! php.ini session.gc_maxlifetime session.cookie_lifetime Если нету возможности изменить данные параметры то делаем так: 1. /system/Session/Store/Database.php заменяем: public static function clearSessions( $timeout ) { \IPS\Db::i()->delete( 'core_sessions', array( 'running_time<?', ( time() - $timeout ) ) ); } на $timeout = 2592000; //1 month public static function clearSessions( $timeout ) { \IPS\Db::i()->delete( 'core_sessions', array( 'running_time<?', ( time() - $timeout ) ) ); } 2. /system/Session/Store/Redis.php заменяем: public static function clearSessions( $timeout ) { \IPS\Redis::i()->zRemRangeByScore( 'session_map', 0, time() - $timeout ); \IPS\Redis::i()->zRemRangeByScore( 'session_online_spiders', 0, time() - $timeout ); \IPS\Redis::i()->zRemRangeByScore( 'session_online_users', 0, time() - $timeout ); \IPS\Redis::i()->zRemRangeByScore( 'session_online_guests', 0, time() - $timeout ); } на $timeout = 2592000; //1 month public static function clearSessions( $timeout ) { \IPS\Redis::i()->zRemRangeByScore( 'session_map', 0, time() - $timeout ); \IPS\Redis::i()->zRemRangeByScore( 'session_online_spiders', 0, time() - $timeout ); \IPS\Redis::i()->zRemRangeByScore( 'session_online_users', 0, time() - $timeout ); \IPS\Redis::i()->zRemRangeByScore( 'session_online_guests', 0, time() - $timeout ); } alexis 1 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Emix12 Опубликовано 8 мая, 2018 Автор Поделиться Опубликовано 8 мая, 2018 Отредактировать нельзя... 1. $timeout = 2592000; //1 month Удаляем строку, в место этого 1. /system/Session/Store/Database.php заменяем на: public static function clearSessions( $timeout ) { \IPS\Db::i()->delete( 'core_sessions', array( 'running_time<?', ( time() - 2592000 ) ) ); } 2. /system/Session/Store/Redis.php заменяем на: public static function clearSessions( $timeout ) { \IPS\Redis::i()->zRemRangeByScore( 'session_map', 0, time() - 2592000 ); \IPS\Redis::i()->zRemRangeByScore( 'session_online_spiders', 0, time() - 2592000 ); \IPS\Redis::i()->zRemRangeByScore( 'session_online_users', 0, time() - 2592000 ); \IPS\Redis::i()->zRemRangeByScore( 'session_online_guests', 0, time() - 2592000 ); } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Emix12 Опубликовано 8 мая, 2018 Автор Поделиться Опубликовано 8 мая, 2018 P.S /system/Session/Store/Redis.php ищем и заменяем : static protected $ttl = 1800; # 1800 30 mins на static protected $ttl = 2592000; #2592000 30day # 1800 30 mins Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
siv1987 Опубликовано 9 мая, 2018 Поделиться Опубликовано 9 мая, 2018 Для идентификации старого пользователя должен быть ключ "login key" с помощью которого создается новая сессия после чего старая умерла. Плодить сессии месячной давности не самая лучшая идея, как минимум статистика форума может повести себя не адекватно да и хранилище сессий за это время сильно переполнится при посещаемом форуме. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Emix12 Опубликовано 9 мая, 2018 Автор Поделиться Опубликовано 9 мая, 2018 3 часа назад, siv1987 сказал: Для идентификации старого пользователя должен быть ключ "login key" с помощью которого создается новая сессия после чего старая умерла. Плодить сессии месячной давности не самая лучшая идея, как минимум статистика форума может повести себя не адекватно да и хранилище сессий за это время сильно переполнится при посещаемом форуме. Ну написать то вы написали, напишите ваш вариант Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.