Jump to content

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

Featured Replies

Posted

Добрый день, проблема заключается, в том что на версии ipb 4.2.8 работало все хорошо, после того как обновились до 4.3 после обновлен до 4.3.1 была замечена проблема с сессиями, после авторизации на форуме через steam, (единственный метод авторизации Sign in through Steam 2.0.4, стандартный метод выключен), после того как закрыть страницу, и подождать некоторое время 30-60 минут, авторизация слетает как с Redis так и без него, то есть меняется ips4_IPSSessionFront как решить проблему? 

  On 07.05.2018 at 13:57, Emix12 said:

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

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

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

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

 

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

 

  • Author
  On 09.05.2018 at 14:23, siv1987 said:

Для идентификации старого пользователя должен быть ключ "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.