2012-02-29 58 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

你基本上是在查看一張存儲「退休」密碼的表格,該表格與其所屬的用戶帳戶以及更改時間相關聯。當他們去改變工作流程進行:

  • 檢查是否有新的密碼是一樣的當前密碼
  • 檢查新的密碼是「舊密碼」數據庫(與該用戶相關)和時間之內範圍

如果這兩個都是假,移動到的變化:

  • 添加當前密碼作爲新條目「老密碼「數據庫(帶時間戳)
  • 將用戶密碼更改爲新密碼並將其保存回其配置文件
  • (可選)修剪」舊密碼「數據庫以查找比我們所關心的項目更舊的數據。

至少我是這樣解決它的。