我对Coldfusion和MSSQL的日期工作时间有点困惑
我构建了一个忘记密码的功能,可以创建一个只能在24小时内使用的临时密码。
因此,当用户请求新的临时密码时,我正在创建一个新密码并设置请求的时间:
<cfset datetime = CREATEODBCDATETIME( Now() ) />
然后我将时间放入数据库
UPDATE users
SET
tempPassword = '#newPassword#'
tempPasswordCreated = #datetime#
WHERE login = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.login#">
然后当用户尝试使用临时密码登录时,我正在检查是否已经过了不到24小时。
<if checkAccounts.tempPassword eq form.password AND DateDiff("h", checkAccounts.tempPasswordCreated, CREATEODBCDATETIME( Now())) lt 24>
<!--- Login Code here--->
</cfif>
然而,
DateDiff("h", checkAccounts.tempPasswordCreated, CREATEODBCDATETIME( Now()))
正在输出12,因为我提交表单后只有几分钟。
答案 0 :(得分:3)
这是一个更适合您的简化版本:
UPDATE users
SET
tempPassword = <cfqueryparam value="#newPassword#" cfsqltype="cf_sql_varchar">
, tempPasswordCreated = <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
WHERE login = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.login#">
=
<cfif checkAccounts.tempPassword eq form.password
AND DateDiff("h", checkAccounts.tempPasswordCreated, now()) lt 24>
<!--- Login Code here--->
</cfif>
这假设您正在使用某种日期/时间字段类型。