Проблемы тайм-аута с CakePHP - PullRequest
       12

Проблемы тайм-аута с CakePHP

4 голосов
/ 25 августа 2010

Это действительно беспокоит меня.Был в течение многих лет.Независимо от того, что я делаю с core.php или php.ini, время входа в систему истекает примерно через час - обычно.Некоторые развертывания идентичного кода и тайм-аута конфигурации через респектабельный промежуток времени.

Это то, что у меня есть на данный момент на одном сайте - время ожидания истекло примерно через час:

session.gc_divisor  1000
session.gc_maxlifetime  86400
session.gc_probability  1

Configure::write('Session.timeout', '28800');
Configure::write('Session.checkAgent', false);
Configure::write('Security.level', 'medium');

Идругой - длился всю ночь:

session.gc_divisor  100
session.gc_maxlifetime  14400
session.gc_probability  0

Configure::write('Session.timeout', '315360000');
Configure::write('Session.checkAgent', false);
Configure::write('Security.level', 'medium');

Теперь, прежде чем вы взволнованы и скажете: «Ну, ответ есть в значении Session.timeout», позвольте мне сказать вам, что этот сайт обычно истекает послеминут двадцать!

Ответы [ 3 ]

4 голосов
/ 27 августа 2010

Где-то я читал, что на виртуальном хостинге другие приложения могут сбросить сеанс, очистив каталог сеанса, определенный php Об этом говорил Роулф в своем ответе.

CakePHP предлагает возможность настроить способ обработки сеансов. В core.php я изменил это на 'cake' (по умолчанию это 'php'):

/**
 * The preferred session handling method. Valid values:
 *
 * 'php'            Uses settings defined in your php.ini.
 * 'cake'       Saves session files in CakePHP's /tmp directory.
 * 'database'   Uses CakePHP's database sessions.
 */
Configure::write('Session.save', 'cake');

Я также гарантировал, что время ожидания сеанса и соответствующие значения php.ini совпадают:

/**
 * Session time out time (in seconds).
 * Actual value depends on 'Security.level' setting.
 */
Configure::write('Session.timeout', '86400');

Пока что система не вышла из системы.

2 голосов
/ 25 августа 2010

Я не думаю, что это особенность Торта; Я видел это, когда не было задействовано никаких фреймворков - это, скорее всего, проблема с вашими настройками конфигурации PHP.

Что вы должны проверить / сделать, чтобы решить проблему:

  1. Укажите выделенный путь для хранения сеансы в session.save_path, если вы этого еще не сделали. Не храните их в / tmp - может возникнуть другой процесс и стереть их для тебя.

  2. Убедитесь (и я имею в виду действительно уверен), что значение session.gc_maxlifetime - это то, что вы думаете (86400, если вы хотите, чтобы время входа в систему истекло после 24 часов бездействия, так далее.). То же самое с session.gc_divisor и session.gc_probability. Несмотря на то, что Руководство по PHP указывает, что настройки сеанса могут быть установлены на любом уровне, в зависимости от хитрости вашей сборки PHP (они все слегка глючат в своих тонких способах :)), вы можете обнаружить, что они не ' на самом деле вступают в силу, если они не заданы в глобальном файле php.ini, а не в коде, .htaccess и т. д. Просто выведите их в свое реальное приложение, чтобы убедиться, что они применяются.

  3. Также, в зависимости от вашей среды, проверьте, использует ли сборка PHP CLI тот же файл php.ini, что и сборка PHP по умолчанию - если сборка CLI использует другой файл конфигурации, и у вас есть задания cron, использующие CLI build, сценарии задания cron могут вызывать процедуру очистки сеанса.

1 голос
/ 18 сентября 2015

Если у вас на одном сервере много приложений CakePHP, это может стать причиной ваших неприятностей. Не забудьте:

  1. Префикс каждого приложения по-разному (префикс $ на core.php).
  2. Измените имя каждого пути cookie:

    Configure::write('Session', array(
    'defaults' => 'php',
    'timeout' => 4320,
    'ini' => array(
        'session.cookie_path' => '/name_app', // this for each app
    )));
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...