Upd: English version of the article: osCommerce: How to increase session lifetime.


По умолчанию сессия в OSC длится 1440 секунд (24 минуты). В файле /includes/functions/sessions.php имеется следующий фрагмент кода:

if (STORE_SESSIONS == 'mysql') { if (!$SESS_LIFE = get_cfg_var('session.gc_maxlifetime')) { $SESS_LIFE = 1440; } //--------- More code... ----------- }

Первая строка означает, что сессии должны храниться в базе данных. В файле configure.php должно быть так:

define('STORE_SESSIONS', 'mysql');

2-я строка: функция get_cfg_var вытаскивает значение длины сессии из php.ini. Можно отредактировать его, изменив значение параметра session.gc_maxlifetime с 1440 на другое. Я выставил 2400 секунд (40 минут). Вот кусок php.ini:

; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. session.gc_maxlifetime = 2400

Здесь нужно учитывать, что изменение параметра session.gc_maxlifetime поменяет длину сессии во всей области действия php.ini на сервере. Если не хочется менять его столь глобально - отредактируем вышеупомянутый код в sessions.php:

  1. Удалим или закомментируем 2-ю и 4-ю строки - проверку наличия настройки параметра session.gc_maxlifetime в конфигурации php сервера.
  2. В 3-й строке поменяем значение $SESS_LIFE с 1440 на желаемое - те же 2400.

Получим следующий код:

if (STORE_SESSIONS == 'mysql') { $SESS_LIFE = 2400; //--------- More code... ----------- }

Теперь время жизни сессии увеличено локально - только для нашего OSC проекта.
 

Примечания:

1. Если закрыть браузер - сессия закроется также.

2. Из соображений безопасности не рекомендуется устанавливать сессию слишком длинной. 3600 сек (60 мин) - верхний предел безопасности.

3. Можно раздельно контролировать время жизни сессий на фронт-энде и в административном сервисе, редактируя по отдельности соответственно /includes/functions/sessions.php и /admin/includes/functions/sessions.php.

Добавить комментарий