【问题标题】:How to keep cookie/session related database clean?如何保持 cookie/session 相关的数据库干净?
【发布时间】:2012-12-11 15:54:44
【问题描述】:

我正在开发一个通过 cookie 或 PHP 会话为用户(即使他们没有登录)持续存在的购物车。因此,每当未登录的用户访问该站点时,我都会在users 表中创建一条新记录,当该用户将商品添加到购物车时,我会创建新的cartscarts_items 记录,依此类推。

这些用户中的许多将永远不会返回,cookie 将过期并且生活继续,但这些表将填充无用的记录。

问题是:如何摆脱这些过期的cookie数据?

【问题讨论】:

    标签: php database cookies shopping-cart


    【解决方案1】:

    听起来您正在重新发明 PHP Session。我建议只将购物车项目保留在数据库之外,而是保留在会话数组中。您可以根据需要将会话配置为持续多久。

    长时间保留购物车物品有一些缺点 - 产品更改/被移除等,您需要在某处定期检查所有购物车物品仍然有效。

    如果您必须将购物车商品存储在数据库中,那么您需要在每次页面查看时更新用户记录,并附上时间戳。使用它,您可以有一个 cron 作业/计划任务,删除时间戳为 X 天的用户和关联的购物车项目。

    Cron 是 Linux/Unix 的一项功能,它允许您在设定的时间点安排任务。例如,如果您想每天凌晨 2 点调用清理脚本,那么您的 cronjob 可能如下所示:

    * 2 * * * /path/to/php -q /path/to/script.php >/dev/null
    

    来自Wikipedia

    *    *    *    *    *  command to be executed
    ┬    ┬    ┬    ┬    ┬
    │    │    │    │    │
    │    │    │    │    │
    │    │    │    │    └───── day of week (0 - 7) (0 or 7 are Sunday, or use names)
    │    │    │    └────────── month (1 - 12)
    │    │    └─────────────── day of month (1 - 31)
    │    └──────────────────── hour (0 - 23)
    └───────────────────────── min (0 - 59)
    

    More info

    【讨论】:

    • 我们正在对这些用户进行分析,因此我们需要将他们的数据存储在服务器端。关于 cron 作业,这似乎是首选方法,如果有任何进一步的信息,那就太好了。
    • @simbirsk 添加了更多信息。如果您使用的是 Linux,Cron 绝对是您的最佳选择。
    【解决方案2】:

    使用 cron 作业,您可以删除过期和不必要的记录。例如:

    $lastWeekStart = strtotime('-1 week');
    

    和sql查询可能是这样的:

    DELETE FROM users WHERE is_not_login = 1 AND updated_at < $lastWeekStart
    

    您每周运行一次此脚本。

    【讨论】:

    • “清理”逻辑看起来不错,但您能解释一下有关 cron 作业的更多信息吗?有什么起点吗?
    • @MrCode 添加了有关 cron 作业的信息。
    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    相关资源
    最近更新 更多