gpt4 book ai didi

oracle - ColdFusion - 重复的 POST 被解雇

转载 作者:行者123 更新时间:2023-12-04 15:59:32 25 4
gpt4 key购买 nike

我发生了一件非常奇怪的事情,似乎无法追踪它。我有一个带有简单表单的简单 CFM,用户按下提交按钮,页面 POST 到自身,然后使用 <cfinvoke> 调用 CFC 函数.被调用的函数有一个 <cfstoredproc>调用甲骨文。该 Oracle 过程应该创建大约 3,000 多条记录。但它创造的数量正好是这个数量的两倍。我放了一个 <cflog>就在 <cfstoredproc> 之前调用并创建了 2 个条目。所以这个函数以某种方式被第二次触发。相同的用户,相同的 SessionID,不同的 ThreadID。我不知道第二个电话是从哪里来的。

  • 我只按了一次按钮。
  • 我看了网络流量,我只看到了一个 POST。

我放了一个<cflock> <cfstoredproc>周围调用并解决了问题,现在只创建了 3000 多个记录。但是现在我收到了这个神秘的第二次调用的锁定超时错误。

另一个奇怪的事情是 <cflock>超时时间为 30 秒。但是 <cflog>最初只显示 1 个条目,然后恰好 60 秒后出现第二个日志条目并且 <cflock>错误发生。我放弃了 <cflock>超时减少到 15 秒,结果仍然相同。为什么第二次神秘通话每次都在第一次通话后恰好 1 分钟被记录?

我正在运行 ColdFusion 10,0,13,287689。

"Severity","ThreadID","Date","Time","Application","Message"

"Information","ajp-bio-8012-exec-9","06/26/14","14:59:34",,"D:\ColdFusion10\cfusion\logs\cbruserwo_cfc.log initialized"
"Information","ajp-bio-8012-exec-9","06/26/14","14:59:34","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054"
"Information","ajp-bio-8012-exec-7","06/26/14","15:00:35","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054" <-- the mysterious one, comes in 1 minute later

"Information","ajp-bio-8012-exec-12","06/26/14","15:08:36","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054"
"Information","ajp-bio-8012-exec-5","06/26/14","15:09:37","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054" <-- the mysterious one, comes in 1 minute later

"Information","ajp-bio-8012-exec-1","06/26/14","15:19:54","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054"
"Information","ajp-bio-8012-exec-7","06/26/14","15:20:57","xxx","USERA // USERA // 1958938 // lockname: B-100139230442054" <-- the mysterious one, comes in 1 minute later

我将 Application.cfc 与 onRequest 一起使用和 onCFCRequest方法(以及其他常用方法)。

部分代码...

<cfcomponent>
<cffunction name="create" access="public">
...removed some trivial code...

<!--- START: debug this craziness --->
<cflock timeout="30" name="A-#form.cbrorderunid#">
<cfif not isdefined("session.cbruserwo_cfc.calledcnt")>
<cfset session.cbruserwo_cfc.calledcnt = 1>
<cfelse>
<cfset session.cbruserwo_cfc.calledcnt = session.cbruserwo_cfc.calledcnt+1>
</cfif>

<cflog file="cbruserwo_cfc" text="#session.sv.un# // #session.sv.fullname# // #session.sv.csid# // lockname: B-#form.cbrorderunid#">

<cfsavecontent variable="xxx">
<cfoutput>
session.cbruserwo_cfc.calledcnt: #session.cbruserwo_cfc.calledcnt#<br>
CGI: <cfdump var="#cgi#">
FORM: <cfdump var="#form#">
URL: <cfdump var="#url#">
ARGUMENTS: <cfdump var="#arguments#">
</cfoutput>
</cfsavecontent>
<cffile action= "write" file="D:\temp\cbruserwo_cfc.html" addNewLine="no" output="#xxx#">
</cflock>
<!--- END: debug this craziness --->

<!--- The debug code above shows another POST/call/request something being made, but the network traffic shows only 1 POST happening --->

<cflock timeout="30" name="B-#form.cbrorderunid#">
<cfstoredproc>
<!---
This is the call that would do the 3000+ inserts, omitted contents, irrelavent to question.
The cflock around it fixes the duplicate records from being created, but now I get lock timeout
errors from this mysterious second request.
--->
</cfstoredproc>
</cflock>
...removed some trivial code...
</cffunction>
</cfcomponent>

更新...

有些人要求提供所有代码,有些人说不要发布所有代码,所以我不知道你们究竟想要什么。我承认这很奇怪。我们最近添加了 application.cfc->onRequest 函数。不确定这是否与它有关。但此时它所做的只是……

<cffunction name="onRequest" access="public">
<cfargument name="TargetPage" type="string" required="true" />

<!--- Make these functions globally accessible --->
<cfset structAppend(url, createObject("component", "lib_globalfunctions"))>

<!--- Include the requested page. --->
<cfinclude template="#ARGUMENTS.TargetPage#" />
</cffunction>

我还检查了所有 Apache ssl_requeSTLog,只有一个帖子发生了。这就是为什么我没有显示我的任何 html、表单、按钮、提交代码的原因。

我将尝试删除所有自定义标签/专有代码,并提出该错误的基本通用复制。如果可以的话,我会重写这个问题并发布。这需要一些时间。只是想知道以前是否有人听说过这样的错误,看起来没有人听说过,谢谢。

更多更新...

它看起来越来越不像 ColdFusion 问题。

每个要点对于每个用户都是可重复的。

  • ME - 最新版本的 Chrome,第二个神秘请求发生。
  • 另一位用户 - 同一栋楼,相同版本的 Chrome,没有第二次请求。
  • ME - IE10,没有第二个请求。
  • 另一位用户 - 在 IE10 大楼外,出现了第二个神秘请求。

最佳答案

检查您的 application.cfc/application.cfm 并查看 onRequest 函数中是否存在对 POST 数据的任何操作。

关于oracle - ColdFusion - 重复的 POST 被解雇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24439969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com