2012-02-29 126 views
-1

我正在处理ASP.NET 2.0中的应用程序,并且我给出了一个任务,即密码不应与过去三个月的c#.net匹配。 前三个月密码字段将为空我将在前三个月存储它们,但从第四个月开始,我必须如何将密码与所有字段进行比较后再次将密码存储在第一个字段中。告诉我一些解决方案我的想法是完全被困住了。比较密码与最近三个月的密码

回答

2

我想说这样做的最好方法是有一个单独的表,包括userID,密码散列和时间戳。当密码更改时,您将插入此处,时间戳将在插入时为当前时间。

SELECT count(*) FROM oldpasswords where userid = :p_userid and 
    password = :p_pass and timestamp < DATE_SUB(NOW(), INTERVAL 3 MONTH); 

如果计数> 0,他们已经在过去3个月内使用过它:

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

然后,当用户试图更改其密码就可以查询该表。如果不是,则将其插入此表并更改主用户表记录。

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

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

会删除超过3个月的任何东西,因为我们不再需要它了。

0

你基本上是在查看一张存储“退休”密码的表格,该表格与其所属的用户帐户以及更改时间相关联。当他们去改变工作流程进行:

  • 检查是否有新的密码是一样的当前密码
  • 检查新的密码是“旧密码”数据库(与该用户相关)和时间之内范围

如果这两个都是假,移动到的变化:

  • 添加当前密码作为新条目“老密码“数据库(带时间戳)
  • 将用户密码更改为新密码并将其保存回其配置文件
  • (可选)修剪”旧密码“数据库以查找比我们所关心的项目更旧的数据。

至少我是这样解决它的。