0

我试图阻止网站在刷新网站后再次发送表单。问题是,当返回到前边更改内容并再次发送电子邮件时,它应该是可能的。

返回时,不会再次加载表单页面,也无法更改 SESSION 变量。但是用户应该仍然能够再次获取他的旧数据并且不必再次输入所有内容。

在仅使用 SESSION 设置变量后,我使用 CGI.HTTP_Referer 来获取用户来自的网站。但是在重新加载网站时,引用者不会改变。所以没有办法那样解决问题。

<cfif Right("#CGI.HTTP_REFERER#", 5) EQ "myForm">
    <cfset SESSION.send = true />
<cfelse>    
    <cfset SESSION.send = false />
</cfif>

有没有办法用javascript或任何其他方式执行coldfusion代码


我尝试了什么:

<cfif isDefined("SESSION.actualSite") EQ "false" 
AND isDefined("SESSION.actualSite") EQ "false">

        <cfset SESSION.lastSite = ArrayNew(1) />
        <cfset SESSION.actualSite = ArrayNew(1) />
        <cftrace var="SESSION.lastSite" text="lastSite1" />
        <cftrace var="SESSION.acutalSite" text="acutalSite1" />
    </cfif>

    <cfif ArrayisEmpty(SESSION.actualSite) EQ "NO">
        <cfoutput>#ArrayLen(SESSION.actualSite)#</cfoutput>
        <cfset SESSION.lastSite[1] = SESSION.actualSite[1] />
        <cfset SESSION.lastSite[2] = SESSION.actualSite[2] />

        <cfdump var="#SESSION#" label="session scope from application.cfm" /><br />

        <cfif SESSION.actualSite[1] NEQ SESSION.lastSite[1] >           
            <cfoutput>INSIDE TRUE BLOCK</cfoutput>
            <cfset SESSION.send = true />
        <cfelse>        
            <cfoutput>INSIDE FALSE BLOCK</cfoutput>
            <cfset SESSION.send = false />
        </cfif>
    </cfif> 

    <cfset SESSION.actualSite[1] = Right("#CGI.CF_TEMPLATE_PATH#", 25) />
    <cfset SESSION.actualSite[2] = Left("#Right("#CGI.HTTP_REFERER#", 25)#", 17) />

在我看来,就像重定位到空白页面的方法一样,您只显示一些输出文本是最简单和最好的方法。但我一直在寻找另一种方法来解决这个问题。在前面的代码中,我将 CGI 变量 CF_TEMPLATE_PATH 和 HTTP_RERFERER 保存在数组中。下次刷新或返回表单并再次提交时,将再次设置数组,并将先前的站点信息(来自之前的页面)移动到第二个数组。这必须在 Application.cfm 中执行。我还在 SESSION 范围内定义了数组......一切都必须没问题,但有些东西不起作用。也许有人可以帮助我?!

4

1 回答 1

5

这就是我在使用的一些网站上处理“重新加载再次发送电子邮件”情况的方式。

提交表单并发送电子邮件后,使用cflocation重定向到一个简单的 html/cfm 文件,感谢他们的输入。用户可以重新加载该页面,它只会重新显示“谢谢”消息。

于 2012-07-19T21:59:00.680 回答