Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session Yii:背驮会话GC进行购物车清理?_Session_Garbage Collection_Yii - Fatal编程技术网

Session Yii:背驮会话GC进行购物车清理?

Session Yii:背驮会话GC进行购物车清理?,session,garbage-collection,yii,Session,Garbage Collection,Yii,我正在使用Yii框架构建一个购物车。我已经创建了一个购物车模型来存储用户添加到购物车中的物品,并且通过使用存储当前会话的会话id字段来跟踪来宾购物者添加到购物车中的产品 但是,如果购物者放弃购物车,或者会话在他们开始结帐之前只是超时,我会发现购物车表中有一堆需要清理的记录 我认为最好的方法是利用Yii用来清理会话表的垃圾收集过程,但我不确定如何做到这一点,甚至不知道这是否是最好的方法 我走对了吗 如果是这样的话,我该如何利用Yii的垃圾收集呢?我对PHP的会话垃圾收集知之甚少,所以我不知道这是否

我正在使用Yii框架构建一个购物车。我已经创建了一个购物车模型来存储用户添加到购物车中的物品,并且通过使用存储当前会话的会话id字段来跟踪来宾购物者添加到购物车中的产品

但是,如果购物者放弃购物车,或者会话在他们开始结帐之前只是超时,我会发现购物车表中有一堆需要清理的记录

我认为最好的方法是利用Yii用来清理会话表的垃圾收集过程,但我不确定如何做到这一点,甚至不知道这是否是最好的方法

我走对了吗


如果是这样的话,我该如何利用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
  ),
),