密码重置令牌是否应该位于与用户表不同的单独表中?

bla*_*e24 6 mysql database

..或者我应该继续将它们存储在用户表中,即使它们大部分为空?

Joh*_*ica 4

出于标准化原因,我会将它们放在单独的表中。

table user
-------------
id integer primary key auto_increment
username varchar
salt_passhash varchar
......

table tokenreset
---------------
id integer primary key auto_increment
user_id integer
when_requested timestamp
all_done boolean default false
Run Code Online (Sandbox Code Playgroud)

如果您想知道需要重置密码的用户,请执行以下操作:

SELECT u.id, u.username, u.email FROM user u
INNER JOIN tokenreset tr ON (u.id = tk.user_id)
WHERE NOT(tr.alldone)
Run Code Online (Sandbox Code Playgroud)

或者那种性质的代码。

这样你就不会有一个user95% 的时间都没有被使用的字段。