Подтвердить что ты не робот

Тайм-аут сеанса CakePHP только для бездействия

Таким образом, суть этого вопроса заключается в том, как предотвратить CakePHP от де-аутентификации сеанса ТОЛЬКО после периода бездействия.

Итак, если пользователь ничего не делает, я ожидаю, что CakePHP выйдет из системы через 30 минут. Однако, если пользователь намеревается посетить страницу на 28-й минуте бездействия, то CakePHP должен "reset" использовать счетчик времени ожидания.

В настоящее время этого не происходит. Независимо от активности, CakePHP истекает через указанное время в моей основной конфигурации (app/Config/core.php).

Здесь мой код конфигурации:

Configure::write('Session', array(
    'defaults' => 'cake',
    'timeout' => '30'
));

Любые идеи?

4b9b3361

Ответ 1

После выполнения той же проблемы я обнаружил, что это было вызвано значением Session.cookieTimeout. Хотя сеанс php все еще действителен, дата истечения срока действия cookie сеанса не обновляется.

Теперь это моя конфигурация сеанса

Configure::write('Session', array(
        'defaults' => 'php',
        'timeout' => 30, // The session will timeout after 30 minutes of inactivity
        'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts
        'checkAgent' => false,
        'autoRegenerate' => true, // causes the session expiration time to reset on each page load
    ));

Ответ 2

В то время как значение timeout сбрасывается на каждом просмотре страницы и, следовательно, обеспечивает требуемый тайм-аут неактивности, дата истечения срока действия cookie сеанса браузера остается постоянной.

Итак, пока сеанс Cake внутри (внутренне = внутренний для Cake) все еще будет живым, если вы обновляетесь на 28-й минуте + 35-й минуте, браузер заканчивает удаление файла cookie сеанса после 30-й минуты.

Вы можете reset истечения срока действия cookie сеанса через $this->Session->renew(). Или установите autoRegenerate = true и requestCountdown = 1, и Cake будет обновляться на каждом просмотре страницы.

(Но это глупо, что вам придется регенерировать сеанс на каждом просмотре страницы. Как и без renew(), значение timeout никогда не вступит в игру, потому что cookie всегда истекает на фиксированном дата, независимо от того, сколько активности. Это похоже на ошибку, но я не рассмотрел обходной путь.)

Ответ 3

У меня была такая же проблема, и я исправил ее с помощью опции autoRegenerate:

Configure::write(
    'Session',
    array(
        'defaults' => 'cake',
        'timeout' => '30',
        'autoRegenerate' => true
    )
);

Вы также можете использовать $this->Session->renew(); в своем классе AppController.php, но указанное выше решение является моим любимым.

Ответ 4

ответ Роб Форрест является правильным.

Configure::write('Session', array(
        'defaults' => 'php',
        'timeout' => 30, // The session will timeout after 30 minutes of inactivity
        'cookieTimeout' => 1440
));

cookieTimeout должен быть больше таймаута если вы хотите, чтобы сессия была истекли бездействия, тогда вам нужно установить cookieTimeout для очень большого числа (например, 60 * 24 * 10 (10 дней))

Ответ 5

    Configure::write('Session', array(
    'defaults' => 'cake',
    'timeout' => 1440, // The session will timeout after 30 minutes of inactivity
    'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts
    'checkAgent' => false,
    'autoRegenerate' => true, // causes the session expiration time to reset on each page load
));

Это работает, хотя сеанс заканчивается через несколько часов, он все же лучше, чем заканчивается в минутах.