Session Yii:背驮会话GC进行购物车清理?
我正在使用Yii框架构建一个购物车。我已经创建了一个购物车模型来存储用户添加到购物车中的物品,并且通过使用存储当前会话的会话id字段来跟踪来宾购物者添加到购物车中的产品 但是,如果购物者放弃购物车,或者会话在他们开始结帐之前只是超时,我会发现购物车表中有一堆需要清理的记录 我认为最好的方法是利用Yii用来清理会话表的垃圾收集过程,但我不确定如何做到这一点,甚至不知道这是否是最好的方法 我走对了吗Session Yii:背驮会话GC进行购物车清理?,session,garbage-collection,yii,Session,Garbage Collection,Yii,我正在使用Yii框架构建一个购物车。我已经创建了一个购物车模型来存储用户添加到购物车中的物品,并且通过使用存储当前会话的会话id字段来跟踪来宾购物者添加到购物车中的产品 但是,如果购物者放弃购物车,或者会话在他们开始结帐之前只是超时,我会发现购物车表中有一堆需要清理的记录 我认为最好的方法是利用Yii用来清理会话表的垃圾收集过程,但我不确定如何做到这一点,甚至不知道这是否是最好的方法 我走对了吗 如果是这样的话,我该如何利用Yii的垃圾收集呢?我对PHP的会话垃圾收集知之甚少,所以我不知道这是否
如果是这样的话,我该如何利用Yii的垃圾收集呢?我对PHP的会话垃圾收集知之甚少,所以我不知道这是否比cron工作更好。据我所知,我刚从谷歌教授那里学到了一点,这让我觉得依赖会话垃圾收集可能不像你想要的那样可靠: 但我想这是可行的。事实上,有点聪明,如果是的话。在这种情况下,您需要重写Yii核心中CDbHttpSession类中的gcSession()方法(假设您使用的是数据库会话存储)。实际上,您可以在config.php文件中非常轻松地重写此方法 首先,创建新的MyCustomHttpSession类,该类扩展CDbHttpSession(可能将其放到/components文件夹中)。确保将新的自定义购物车垃圾收集添加到gcSession()函数中
我没有测试这个,但它应该工作得很好。祝你好运 您最好的选择可能是运行cron作业。您甚至可能希望在清除数据之前收集该数据的一些统计信息。使用cron作业当然是一种选择。但我希望能够使用Yii的功能来处理这个问题。这将使收集统计数据变得更加简单。
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;
}
}
'components'=>array(
'session'=>array(
'class' => 'application.components.MyCustomHttpSession',
'connectionID' => 'db',
'timeout'=>14400, // 4 hour session time
),
),