2016-11-09 4 views
1

Dieses Codeteil wird derzeit erstellt, um IPs basierend auf der Verwendung zu blockieren. Eine E-Mail wurde ausgelöst und ein Insert ausgeführt, dessen IP-Adresse die cfif-Bedingung erfüllt. Wenn ich jedoch die Abfrage im SQL-Editor für dieselbe IP-Adresse ausgeführt habe, gab sie den Zählerstand als 0 zurück (z. B. getNineHundertCnt.maxDownload).Unerwartete Ergebnisse von CFQUERY- und CFIF-Vergleich

Dies ist nur für einen Benutzer passiert. Es funktioniert gut für den Rest der Benutzer, mit fast 1L Benutzer täglich auf die Anwendung zugreifen. Kann mir jemand erklären, warum es passiert ist?

<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> 
+0

Gibt es eine Chance, 0 als Werte aus der SQL-Abfrage zurückzugeben, wenn die Abfrage zeitlimitiert ist? –

+0

Wie viele Zeilen befinden sich in ExcessiveUsageConfig? –

+0

seine einzige Zeile, und der Wert der Spalte MAXFIFMINDOWNLOAD ist 900 –

Antwort

3

Eine Möglichkeit ist, dass getNineHundredCnt.maxDownload 0 und usageLimitStruct.maxFifMinDownload 0 als auch. Gib die Werte aus und verifiziere.

Verwandte Themen