是否应在用户注销后从记录中清除会话 table?

Should a session table be cleared off from the records after a user logs out?

我正在使用 MySql table 来存储当前登录用户的会话记录。用户注销后,我会更新同一条记录中的几个字段并标记(撤销)它不应再次使用。因此,对于每个 LogIn,都会创建一条新记录。这符合我的目的,但事实证明 table 会变得很大。

存储会话的标准方法应该是什么?那些被撤销的应该存储在单独的 table 中,还是应该删除或保留在相同的 table 中?

我考虑将数据留在同一个会话中 table。在查询特定记录时,我使用两个字段进行查询:(idPeople(不唯一)和 revoked(0 或 1)),例如 SELECT * FROM session WHERE idPeople = "someValue" AND revoked = 0。然后在用户登录或退出时根据需要更新记录。 table 的巨大尺寸会影响这个吗?或者 MySql 会处理这个?我看不到的其他后果是什么?

首先,向您的 table 添加一个唯一字段可能是个好主意(例如 SESSION_ID,它可以是 运行ning 自动递增数字),定义此字段作为唯一 ID,并使用它来快速查找要更新的记录(即 revoke=1)。

其次,这种table总是触发你要问的问题,只有在你评估并回答一些初步问题后才能给出最佳答案,例如:

  1. 当您希望检查用户的活动时,回到过去多长时间才有意义?一个月?一年?

  2. 您可能希望保留此信息的最长期限是多少(即使使用非常规查询来检索?

  3. 什么类型的问题(查询)我希望在这个table上被问到?

如果你回答了这些问题,你可以考虑以下选项:

  1. 有一个例行程序,每天 运行 一次(在午夜或您的系统可以负担得起的任何其他时间),这将删除时间戳早于一个的行月(或任何其他适合您需要的时间段),或

  2. 同上,但首先将这些记录复制到 "history" table,

  3. 将 table 的结构更改为更高效的结构,方法是添加一些字段(如上所建议)和索引,以便为您的 "SELECT" 需求提供良好的答案.