Я не знаю много о сессионной сборке мусора в PHP, поэтому я не знаю, является ли это лучшим способом, чем работа cron. Мало того, что я знаю, я только что узнал от профессора Google, и это заставляет меня думать, что полагаться на сессионную сборку мусора не так надежно, как вы хотите:
Как мне закончить сеанс PHP через 30 минут?
Но это может сработать, я полагаю. Вид умный, на самом деле, если это так. И в этом случае вам потребуется переопределить метод gcSession () в классе CDbHttpSession в ядре Yii (при условии, что, как вы говорите, вы используете хранилище сеансов базы данных). Вы можете переопределить этот метод очень легко, на самом деле, в вашем файле config.php.
Сначала создайте новый класс MyCustomHttpSession, который расширяет CDbHttpSession (возможно, поместите его в папку / components). Обязательно добавьте новую функцию сбора мусора в корзину в функцию gcSession ()!
class MyCustomHttpSession extends CDbHttpSession
{
public function gcSession($maxLifetime) {
/**** ADD YOUR CUSTOM LOGIC HERE ****/
$sql="DELETE FROM {$this->sessionTableName} WHERE expire<".time();
$this->getDbConnection()->createCommand($sql)->execute();
return true;
}
}
Затем скажите Yii использовать ваш новый класс MyCustomHttpSession в массиве конфигурации компонентов:
'components'=>array(
'session'=>array(
'class' => 'application.components.MyCustomHttpSession',
'connectionID' => 'db',
'timeout'=>14400, // 4 hour session time
),
),
Я не проверял это, но оно должно работать нормально. Удачи!