我正在遵循this answer的解决方案#1 。一段时间后,表中就会出现一些多余的行。假设这个表:
+------+------------------+
| user | cookie |
+------+------------------+
| 1 | ojer0f934mf2... |
| 2 | ko4398f43043... |
| 2 | 34fjkg3j438t... |
| 3 | 0243hfd348i4... |
+------+------------------+
当用户1
删除浏览器的cookie时,数据库中仍然存在此行:
| 1 | ojer0f934mf2... |
当他打开我的网站时,他需要再次登录。所以这是表格:
+------+------------------+
| user | cookie |
+------+------------------+
| 1 | ojer0f934mf2... | -- now this row is useless anymore
| 2 | ko4398f43043... |
| 2 | 34fjkg3j438t... |
| 3 | 0243hfd348i4... |
| 1 | 0243hfd348i4... |
+------+------------------+
将来,此类无用行的数量肯定会增加。那么我该如何管理呢?实际上,我可以创建一个 EVENT
通过删除冗余行来清理该表(每天)。但问题是:我怎样才能检测到它们?如何指定某一行是无用的?
编辑:我可以添加一个新列并存储时间戳,然后通过 EVENT
(或 cron 作业)删除所有旧时间戳行。但这并不是一个完美的解决方案。我希望 Cookie 在用户注销之前一直有效(因此我不喜欢对 Cookie 进行任何限制(或过期时间))。
现在我正在寻找一种解决方案来确定冗余行(不是旧行)。
最佳答案
添加另一列带有时间戳。然后运行常规 cron 作业来删除时间戳早于特定阈值(例如 1 天)的任何行。
您可以输入时间戳并在每次看到该用户时更新它,这意味着他们在上次使用该网站后的 x 时间内“注销”(但这意味着更多的数据库传输);或者您可以在第一次创建 session 时输入一个时间戳,并且不再触摸它,这将在他们上次登录后的 x 时间内“注销它们”(对于用户来说可能不太方便,但这意味着更少数据库传输)。
关于php - 如何检测表中的冗余行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085782/