Этот фрагмент кода находится в производстве для блокировки IP-адресов в зависимости от использования. Электронная почта была инициирована, и выполнена вставка с IP-адресом, удовлетворяющим условию cfif. Однако, когда я выполнил запрос в редакторе SQL для того же IP, он вернул счетчик как 0 (т.е. getNineHundredCnt.maxDownload).
Это произошло только для одного пользователя. Он отлично работает для остальных пользователей, почти 1 л пользователей ежедневно обращаются к приложению. Может ли кто-нибудь помочь объяснить, почему это произошло?
<cfquery name="getExcessiveUsageConfig" DATASOURCE="#arguments.datasrc#">
SELECT * FROM ExcessiveUsageConfig
</cfquery>
<cfset usageLimitStruct.maxFifMinDownload = getExcessiveUsageConfig.MAXFIFMINDOWNLOAD >
<!---- This value is 900 and not changed --->
<cfquery name="getNineHundredCnt" DATASOURCE="#arguments.datasrc#">
SELECT
( select count(9)
from downloads
where download_time > dateadd(minute,-15,getdate())
and USER_IP = <cfqueryparam value="#remoteAddress#" cfsqltype="CF_SQL_VARCHAR">
) as maxDownload,
( select TOP 1 DATEDIFF(second, DOWNLOAD_TIME, GETDATE())
from CAPTCHA
WHERE USER_IP = <cfqueryparam value="#remoteAddress#" cfsqltype="CF_SQL_VARCHAR">
and Erights_sessionId = <cfqueryparam value="#arguments.erightsCookie#" cfsqltype="CF_SQL_VARCHAR">
order by DOWNLOAD_TIME DESC
) as Ccheck
</cfquery>
<cfif getNineHundredCnt.maxDownload gte usageLimitStruct.maxFifMinDownload>
<cfquery name="checkToBlockIpExcessUsage" DATASOURCE="#arguments.dataAuthentication#">
INSERT INTO DisabledIPs(IP,TIMEDISABLED)
VALUES (<cfqueryparam value="#remoteAddress#" cfsqltype="CF_SQL_VARCHAR">,GETDATE())
</cfquery>
<cfmail from="[email protected]" to="[email protected]" subject="IP Blocked" type="text">
IP : #remoteAddress#
Time : #currentTime#
The IP has been blacklisted
</cfmail>
</cfif>
getNineHundredCnt
с помощью ColdFusion вне этой функции? - person Dan Bracuk   schedule 09.11.2016var/local
область видимости всех переменных? Если это так, это может привести к условиям гонки и сценарию, который вы описали. Решение состоит в том, чтобыvar/local
охватить все локальные переменные функции, включая имена запросов. - person Leigh   schedule 10.11.2016