在 Coldfusion 和数据库之间传递日期时间

Passing DateTimes between Coldfusion and Database

我对日期时间在 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。

这里有一个应该适合您的更简化的版本:

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>

这是假设您正在使用某种 date/time 字段类型。