Jump to content

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

Featured Replies

Posted
comment_147207

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

  • Author
comment_147212

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

 

  • Author
comment_147220

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

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

 

  • Author
comment_147235

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

static protected $ttl = 1800;  # 1800 30 mins

на 

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

 

comment_147362

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

 

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

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

 

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

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
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.