php - 如何检测表中的冗余行?

标签 php mysql sql security cookies

我正在遵循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/

相关文章:

sql - 返回虚拟列的 MySQL 选择?

sql - 无法删除某些行的数据库关系建模

mysql - 如何在两个字段上使用 COUNT 和 GROUP BY

php - 使用 pdo 删除查询中传递的变量

php - 拉维尔 4.2 : Copying database records from one database to another

mysql - Perl DBI 连接不一致

mysql - 在 Cloudera 中使用 sqoop 将数据从 HDFS 导出到 mysql 时作业失败

带有 PayPal 新 header 要求的 PHP Curl 帖子

php - 不使用带有奇怪访问器的注释时加载 mongodb 哈希关联数组映射的正确方法

php - 查询插入或如果需要更新记录