我正在开发一个通过cookie或PHP会话持续存储给用户的购物车(即使他们没有登录)。因此,当用户将某个项目添加到购物车时,只要未登录的用户访问该网站,我就会在users
表中创建新记录,新的carts
和carts_items
记录,所以上。
这些用户中的许多用户永远不会返回,Cookie将过期并且生命继续,但这些表将填充无用的记录。
问题是:如何摆脱这些过期的cookie数据?
答案 0 :(得分:2)
听起来你正在重新发明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)
答案 1 :(得分:1)
使用cron作业,您可以删除过期和不必要的记录。例如:
$lastWeekStart = strtotime('-1 week');
和sql查询可能是这样的:
DELETE FROM users WHERE is_not_login = 1 AND updated_at < $lastWeekStart
您每周运行一次此脚本。