Jump to content

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


 Share

Recommended Posts

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

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

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

 

Link to comment
Share on other sites

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

static protected $ttl = 1800;  # 1800 30 mins

на 

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

 

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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

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

 

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...