gpt4 book ai didi

coldfusion - 多次将查询参数传递给 ColdFusion 文件?

转载 作者:行者123 更新时间:2023-12-03 16:43:24 25 4
gpt4 key购买 nike

我在特定文件 email_output.cfm 中设置了一个 cfmail 函数,它需要传递给它的 ID 才能正常工作,例如 email_output.cfm?ID=1。我想设置一个 cron 作业,该作业通过一个返回各种需要传递的 ID 的查询来运行。在测试中,我可以执行以下操作:

  <cflocation url="email_output.cfm?ID=10" >

但是,由于 cflocation 会停止所有其他执行并打开另一个页面,所以我无法遍历它。我如何将参数从查询多次传递到单个 CF 页面?

谢谢 - 乔

最佳答案

此...的自定义标记示例实现

如果这是您第一次使用自定义标签,最简单的方法是将其放在调用它的页面所在的同一文件夹中。有几个选项可以将它放在不同的目录中,但让我们从简单的开始。

电子邮件成员.cfm

<cfquery name="GetUIDs">
select userid from users
</cfquery>

<cfoutput query="GetUIDs">
<cf_maileach uid="#userID#">
</cfoutput>

注意到我如何称呼我的标签 cf_maileach 了吗?

在同一个目录下,放置maileach.cfm,看名字匹配的怎么样?

maileach.cfm

<cfif StructKeyExists(attributes,"uid") and val(attributes.uid) gt 0>
<cfquery name="getinfo">
select fname,lname,email
from users
where userID = <cfqueryparam cfsqltype="cf_sql_integer" value="#attributes.uid#">
</cfquery>

<cfmail to="#getinfo.email#" subject="Hi #getinfo.fname#">...</cfmail>
</cfif>

注释

  • 根据您的 cf 版本,以及您是否使用 application.cfc,有多种方法可以将自定义标签放置在外部目录中。还有<cfmodule>
  • 这只是一个示例,这个基本的东西是多余的,我只是想模仿提问者概述的内容。在此示例中,我调用了一个可以获取所有数据的查询,仅用于逐行查询。
  • 如果您不熟悉 <cfqueryparam> ,查找它,使用它,喜欢它。

编辑:虽然 CFHTTP 方法可以达到这个目的,但它有一些问题

  • session 不会自动传递(即使请求服务器和目标服务器相同。)。
  • 页面像浏览器请求一样被访问。 Application/OnRequestEnd 被处理(并且由于 session 信息也被传递,这可能会导致尝试访问安全区域中的文件时出现问题。
  • 由于上述原因,该页面需要位于具有自己的应用程序文件的文件夹中,以否定目录层次结构中位于其上方的任何应用程序文件。
  • 要解决第 1、2 和 3 点,您需要在类似于应用程序自身安全性的安全层中编写代码,以便文件在找到 url 时不易受到攻击。
  • 每次通过 cfhttp 调用文件都需要调用一些额外的安全检查。
  • 速度明显变慢。在使用零内容 application.cfc 进行的非常简单的测试中,自定义标记方法的执行时间实际上 <= 1/100。随着实际功能被添加到方法中,结果的差异会发生变化。

这里有一些示例代码,您可以自行测试。

“安全”文件夹的内容:

应用程序.cfc

[ blank file, to negate my testing site's actual application.cfc ]

测试运行.cfm

<cfoutput><cfset starttick = GetTickCount()>
<cfloop from="1" to="20" index="i">
<cfhttp url="http://mysamesite.com/safe/http.cfm?u=#i#" method="get" result="test">
#test.filecontent#<br>
</cfloop>
CFHTTP Execution Time: #(GetTickCount() - starttick)#<br><br>

<cfset starttick = GetTickCount()>
<cfloop from="1" to="20" index="i">
<cf_testtag u="#i#"><br>
</cfloop>
CustomTag Execution Time: #(GetTickCount() - starttick)#<br><br>
</cfoutput>

测试标签.cfm

<cfoutput>The ID entered was #attributes.u#</cfoutput>

http.cfm

<cfoutput>The ID entered was #url.u#</cfoutput>

结果(以毫秒为单位)每个测试在 HTTP 上通过 20 次,在自定义标记上通过 20 次。

CFHTTP  Tag
661ms 6ms
1624 5
616 5
460 4
522 6
816 4

关于coldfusion - 多次将查询参数传递给 ColdFusion 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26342440/

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