小编Nic*_*ich的帖子

查看我的设计:网站的密码重置工具

当有人丢失密码时,他们会点击丢失或忘记的密码链接.他们将需要输入自己的电子邮件地址,然后回答他们自己的秘密问题,如果这个秘密的问题是正确的,电子邮件将与24小时后失效的链接发送给他们.

在发送电子邮件时,会在包含此信息的数据库表中输入记录: - 需要重置密码的人的电子邮件 - 重置密码的时间将到期 - 请求休息的时间密码已提交.

发送的链接将引导用户输入允许他们输入新密码的表单.在这种形式下,他们需要输入他们的电子邮件地址和密码X2.

当他们点击提交时,会对db进行检查以确保电子邮件有效(密码正在重置)并且尚未过期(通过比较两个日期以查看到期时间是否已过,这是24小时)

如果电子邮件是有效的,且尚未到期,这两个密码相匹配和满足最低的REQ,那么新的密码应用.

成功时会显示​​确认消息.

Q1.这是密码恢复的好模型吗?Q2.如何确保发送到用户地址的链接是唯一的?在那个没有人会得到相同的链接?所以,没人能随便去的密码重置页面,并尝试不同的电子邮件,而有需要重置有,对于只考虑工作的自己独特的URL每个帐户.

关于Q2:

我在想,当用户要求有自己的密码重置时,产生并存储在24小时后失效相同的记录一个随机的唯一ID.这个随机唯一id的列可以被称为"rid"

将发送给用户的电子邮件中的链接将以?rid = xxxxxxxxxxxxx结尾

当用户在重置密码的页面中单击"提交"时,页面顶部的"rid"用于从db获取相应的电子邮件地址,以将其与表单中的电子邮件地址进行比较.这样做可以确保每个密码重置案例都有自己唯一的URL,其他帐户无法使用该URL重置其密码.

这是一个可行的解决方案?

任何贡献或建议将不胜感激.

security web-applications

5
推荐指数
2
解决办法
2417
查看次数

在Minfusion中比较DateTime值,而在Coldfusion CFQUERY中比较Day

这是我的查询.

<cfquery name="qryname" datasource="dsn">
UPDATE ticketlist
SET status  = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="Expired"> 
WHERE expdatetime < 
<cfqueryparam value = "#yourDate#" cfsqltype = "CF_SQL_DATE" maxLength = "19">
</cfquery>
Run Code Online (Sandbox Code Playgroud)

它能够给我所有结果,他们的expdatetime小于#yourdate#,唯一的问题是它只显示结果谁的差异是一整天,但不是那些差异在最小.因此,expdatetime的差异小于#thertime#by min's将不会显示在结果中,除非差异至少为一天.

如何针对最小精度优化此查询?

我知道两个可能有用的函数,DateDiff和DateCompare,但我不知道如何在查询中应用它们.

DateDiff("datepart","date1","date2")

DateCompare("date1","date2"[,"datePart"])

DatePart精确度

* s Precise to the second
* n Precise to the minute
* h Precise to the hour
* d Precise to the day
* m Precise to the month
* yyyy Precise to the year
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

mysql coldfusion cfquery cfqueryparam

1
推荐指数
1
解决办法
580
查看次数