【发布时间】:2012-02-29 04:53:53
【问题描述】:
我正在开发一个 ASP.NET 2.0 中的应用程序,并且我给出了一个密码不应该与最近三个月 c#.net 匹配的任务。 对于前三个月,密码字段将为空,我将在前三个月存储它们,但从第 4 个月开始,我必须做什么在将密码与所有字段进行比较后,我将如何再次将密码存储在第一个字段中。告诉我一些解决方案,我的想法完全是卡住了。
【问题讨论】:
标签: sql asp.net-ajax c#-2.0
我正在开发一个 ASP.NET 2.0 中的应用程序,并且我给出了一个密码不应该与最近三个月 c#.net 匹配的任务。 对于前三个月,密码字段将为空,我将在前三个月存储它们,但从第 4 个月开始,我必须做什么在将密码与所有字段进行比较后,我将如何再次将密码存储在第一个字段中。告诉我一些解决方案,我的想法完全是卡住了。
【问题讨论】:
标签: sql asp.net-ajax c#-2.0
我会说最好的方法是创建一个单独的表,其中包含用户 ID、密码哈希和时间戳。更改密码时,您将在此处插入,时间戳将是插入时的当前时间。
CREATE TABLE `oldpasswords` (
`userid` int(11) NOT NULL,
`password` varchar(255) NOT NULL default '0',
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`userid`,`password`, `timestamp`)
);
然后你可以在用户尝试修改密码时查询这个表:
SELECT count(*) FROM oldpasswords where userid = :p_userid and
password = :p_pass and timestamp < DATE_SUB(NOW(), INTERVAL 3 MONTH);
如果计数 > 0,他们在过去 3 个月内使用过。如果没有,请将其插入此表并更改主用户表记录。
您可能还想定期清理此表。
DELETE FROM oldpasswords WHERE timestamp < DATE_SUB(NOW(), INTERVAL 3 MONTH);
将删除超过 3 个月的任何内容,因为我们不再需要它了。
【讨论】:
您基本上是在查看一个存储“已停用”密码的表格,这些密码与它所属的用户帐户以及更改时间相关联。当他们去改变工作流程时:
如果这两个都是 false,请继续进行更改:
至少我会这样处理它。
【讨论】: