首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii:利用会话GC进行购物车清理?

Yii:利用会话GC进行购物车清理?
EN

Stack Overflow用户
提问于 2011-10-03 09:31:06
回答 1查看 947关注 0票数 0

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

但是,如果购物者放弃购物车,或者会话在他们继续到结账之前超时,我发现购物车表中有一堆记录需要清理。

我在想,最好的方法是利用Yii用来清理会话表的垃圾收集过程,但我不确定如何做到这一点,或者这是否是最好的方法。

我是不是走对了路?

如果是这样,我该如何利用Yii的垃圾收集呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-04 19:40:05

我不太了解PHP的会话垃圾收集,所以我不知道这是不是比cron工作更好的方法。据我所知,我是从Google教授那里学到的,这让我觉得依赖会话垃圾收集可能并不像你想的那样可靠:

How do I expire a PHP session after 30 minutes?

但我想,这是可行的。实际上,如果真的是这样的话,还是挺聪明的。在这种情况下,您需要覆盖Yii核心中CDbHttpSession类中的gcSession()方法(假设您所说的是使用数据库会话存储)。实际上,您可以很容易地在config.php文件中覆盖此方法。

首先,创建扩展CDbHttpSession的新MyCustomHttpSession类(可能将其放在/components文件夹中)。确保将新的定制购物车垃圾收集添加到gcSession()函数中!

代码语言:javascript
复制
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类:

代码语言:javascript
复制
'components'=>array(
  'session'=>array(
    'class' => 'application.components.MyCustomHttpSession',
    'connectionID' => 'db',
    'timeout'=>14400, // 4 hour session time
  ),
),

我没有对此进行测试,但它应该工作得很好。祝好运!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7630378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档