0

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

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

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

4

2 回答 2

2

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

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

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

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

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

来自维基百科

*    *    *    *    *  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)

更多信息

于 2012-12-11T16:08:40.870 回答
1

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

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

和 sql 查询可能是这样的:

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

您每周运行一次此脚本。

于 2012-12-11T16:02:14.787 回答