Yii: Взаимодействие с GC сессии для очистки корзины? - PullRequest
0 голосов
/ 03 октября 2011

Я создаю корзину для покупок с использованием фреймворка Yii. Я создал модель корзины для хранения товаров, которые пользователь добавляет в корзину, и я отслеживаю продукты, добавленные гостевыми покупателями в корзину, используя поле session_id, в котором хранится текущий сеанс.

Однако, если покупатель покидает корзину или сеанс просто останавливается, прежде чем он перейдет к оформлению заказа, я обнаружил, что в таблице корзины есть куча записей, которые необходимо очистить.

Я думал, что лучший способ сделать это - вернуться к процессу сбора мусора, который Yii использует для очистки таблицы сеанса, но я не уверен, как это сделать, или даже если это лучший способ.

Я на правильном пути?

Если это так, как я могу заниматься сбором мусора в Yii?

1 Ответ

2 голосов
/ 04 октября 2011

Я не знаю много о сессионной сборке мусора в 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
  ),
),

Я не проверял это, но оно должно работать нормально. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...