比较密码和最近三个月的密码

时间:2012-02-29 04:53:54

标签: sql asp.net-ajax c#-2.0

我正在使用ASP.NET 2.0中的应用程序,并且我已经给出了一个密码与最近三个月c#.net不匹配的任务。 前三个月密码字段将为null我将在前三个月存储它们但是从第4个月开始我将如何在将密码与所有字段进行比较后再将密码存储在第一个字段中。告诉我一些解决方案我的想法完全是stucked。

2 个答案:

答案 0 :(得分:2)

我想说最好的方法是使用一个由userID,密码哈希和时间戳组成的单独表。当密码更改时,您将插入此处,时间戳将是插入时的当前时间。

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);

如果计数&gt; 0,他们在过去3个月内使用过它。如果没有,请将其插入此表并更改主用户表记录。

您可能还想定期清理此表。

DELETE FROM oldpasswords WHERE timestamp < DATE_SUB(NOW(), INTERVAL 3 MONTH);

将删除超过3个月的任何内容,因为我们不再需要它了。

答案 1 :(得分:0)

您基本上在查看存储“已退役”密码的表,该表与其所属的用户帐户以及更改时间相关联。当他们改变工作流程时:

  • 检查新密码是否与当前密码相同
  • 检查新密码是否在“旧密码”数据库中(与该用户关联)并且在时间范围内

如果两者都是 false ,请转到更改:

  • 将当前密码作为新条目添加到“旧密码”数据库(带时间戳)
  • 将用户密码更改为新密码并将其保存回其个人资料
  • (可选)修剪“旧密码”数据库,查找比我们更关心的条目。

至少我会如何处理它。