如何保持cookie /会话相关数据库清洁?

时间:2012-12-11 15:54:44

标签: php database cookies shopping-cart

我正在开发一个通过cookie或PHP会话持续存储给用户的购物车(即使他们没有登录)。因此,当用户将某个项目添加到购物车时,只要未登录的用户访问该网站,我就会在users表中创建新记录,新的cartscarts_items记录,所以上。

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

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

2 个答案:

答案 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)

More info

答案 1 :(得分:1)

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

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

和sql查询可能是这样的:

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

您每周运行一次此脚本。