【问题标题】:Compare password with last three months passwords将密码与最近三个月的密码进行比较
【发布时间】:2012-02-29 04:53:53
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我会说最好的方法是创建一个单独的表,其中包含用户 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 个月的任何内容,因为我们不再需要它了。

    【讨论】:

      【解决方案2】:

      您基本上是在查看一个存储“已停用”密码的表格,这些密码与它所属的用户帐户以及更改时间相关联。当他们去改变工作流程时:

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

      如果这两个都是 false,请继续进行更改:

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

      至少我会这样处理它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-25
        • 2021-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        • 2020-08-09
        • 1970-01-01
        相关资源
        最近更新 更多