Перейти к содержанию

Не правильная работа сессии


Рекомендуемые сообщения

Добрый день, проблема заключается, в том что на версии 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
 

Ссылка на комментарий
Поделиться на другие сайты

Странно конечно, тут почему то сессия не слетает 

Screenshot_3.thumb.png.e09ba742391838a9e27c4b82b61908dd.png

Ссылка на комментарий
Поделиться на другие сайты

Проблема решена, проблема заключается во времени жизни сессии!! 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 );
}

 

Ссылка на комментарий
Поделиться на другие сайты

Отредактировать нельзя... 

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 );
}

 

Ссылка на комментарий
Поделиться на другие сайты

P.S /system/Session/Store/Redis.php ищем и заменяем : 

static protected $ttl = 1800;  # 1800 30 mins

на 

static protected $ttl = 2592000; #2592000 30day # 1800 30 mins

 

Ссылка на комментарий
Поделиться на другие сайты

Для идентификации старого пользователя должен быть ключ "login key" с помощью которого создается новая сессия после чего старая умерла. Плодить сессии месячной давности не самая лучшая идея, как минимум  статистика форума может повести себя не адекватно да и хранилище сессий за это время сильно переполнится при посещаемом форуме.

 

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, siv1987 сказал:

Для идентификации старого пользователя должен быть ключ "login key" с помощью которого создается новая сессия после чего старая умерла. Плодить сессии месячной давности не самая лучшая идея, как минимум  статистика форума может повести себя не адекватно да и хранилище сессий за это время сильно переполнится при посещаемом форуме.

 

Ну написать то вы написали, напишите ваш вариант 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...